@yag/id-hash
TypeScript icon, indicating that this package has built-in type declarations

1.0.0 • Public • Published

@yag/id-hash

License GitHub tag npm version Build Status Coveralls github Dependencies Status Known Vulnerabilities

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>

Package Sidebar

Install

npm i @yag/id-hash

Weekly Downloads

6

Version

1.0.0

License

BSD-3-Clause

Unpacked Size

36.7 kB

Total Files

24

Last publish

Collaborators

  • yasselavila