@yag/id-hash
v1.0.0
Published
A reversible base62 ID obfuscator
Downloads
38
Maintainers
Readme
@yag/id-hash
Copyright (c) 2016 - 2020, Yassel Avila Gil (https://twitter.com/yasselavila).
What is this?
A reversible base62 ID obfuscator.
Idea taken from: Auto-Incrementing IDs: Giving your Data Away.
Code initially based on: Tiny: A reversible base62 ID obfuscater.
License
New BSD License. See LICENSE.txt.
Documentation
Installation
@yag/id-hash
is available for Node.js on npm. To install it, type:
npm install -P @yag/id-hash
Usage
Simple usage:
import { encode, decode } from '@yag/id-hash';
const encoded = encode(1000 /*[, seed ]*/); // 'QI'
const decoded = decode(encoded /*[, seed ]*/); // 1000
console.log('Encoded/Decoded: ', encoded, '/', decoded);
TypeScript:
import IdHash from '@yag/id-hash';
const hasher: IdHash = new IdHash();
// You can set your own seed from configuration, to keep your hashing uniform
// hasher.setSeed('J3ViNZBOGTWCdKfwReSjU8Pgcq6ELvMtyxn0apz2547brk1lIoYA9suhDmFHQX');
// Or you can generate a new one
// hasher.useRandomSeed(); // or...
// hasher.setSeed(IdHash.generateSeed());
// Get the seed, default is: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
console.log('Seed: %s', hasher.getSeed());
for (let id: number = 1001; id <= 1005; id++) {
const encoded: string = hasher.encode(id);
const decoded: number = hasher.decode(encoded);
console.log('Encoded %s=%s / Decoded: %s=%s', id, encoded, encoded, decoded);
}
// Encoded 1001=RT / Decoded: RT=1001
// Encoded 1002=RW / Decoded: RW=1002
// Encoded 1003=RC / Decoded: RC=1003
// Encoded 1004=Rd / Decoded: Rd=1004
// Encoded 1005=RK / Decoded: RK=1005
JavaScript (ES5 / CommonJS):
var IdHash = require('yag-id-hash').IdHash;
var hasher = new IdHash();
// You can set your own seed from configuration, to keep your hashing uniform
// hasher.setSeed('J3ViNZBOGTWCdKfwReSjU8Pgcq6ELvMtyxn0apz2547brk1lIoYA9suhDmFHQX');
// Or you can generate a new one
// hasher.setSeed(IdHash.generateSeed());
// Get the seed, default is: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
console.log('Seed: %s', hasher.getSeed());
for (var id = 101; id <= 150; id++) {
var encoded = hasher.encode(id);
var decoded = hasher.decode(encoded);
console.log('Encoded %s=%s / Decoded: %s=%s', id, encoded, encoded, decoded);
}
Directly in (legacy?) browsers:
<!-- 1.14 kb gzipped / ~1022 bytes if you use Brotli ;-) -->
<script src="/node_modules/@yag/id-hash/bundles/idhash.umd.bundle.js"></script>
<script>
var PREDEFINED_SEED = 'vMtyxn0apz25ViNZBOJ3SjU8Pgcq6ELGTWCdKfwRe47brk1lIoYA9suhDmFHQX';
var hasher = new IdHash(PREDEFINED_SEED);
var m1 = 1000;
var r1_1 = hasher.encode(m1);
var r1_2 = hasher.decode(r1_1);
alert("r1_1 === 'Bp': " + ( r1_1 === 'Bp' )); // true
alert("r1_2 === 1000: " + ( r1_2 === m1 )); // true
</script>