hashids

news/2024/11/8 22:44:09/

它的原理就是从数字经过一个加盐(salted)算法产生一个哈希(hash)字符串。这样算法就是通过混淆使结果具有不可预测性,而唯一性依然由数字本身来达成,从而得到(类似 youtube 里的)足够短,不可预测且唯一的 ID。

安装:

npm install hashids

简单例子:

let Hashids = require( 'hashids');
let hashids = new Hashids();

let id = hashids. encode( '1'); //jR
let numbers = hashids. decode(id); //[1]


更多选项:

  1. encode多种写法
    let Hashids = require( 'hashids');
    let hashids = new Hashids();
    console. log(hashids. encode( 1, 2, 3)); // o2fXhV
    console. log(hashids. encode([ 1, 2, 3])); // o2fXhV
    console. log(hashids. encode( '1', '2', '3')); // o2fXhV
    console. log(hashids. encode([ '1', '2', '3'])); // o2fXhV

  2. 通过项目名称,使ids唯一
    let hashids = new Hashids( 'My Project');
    console. log(hashids. encode( 1, 2, 3)); // Z4UrtW
    let hashids = new Hashids( 'My Other Project');
    console. log(hashids. encode( 1, 2, 3)); // gPUasb

  3. ids长度
    let hashids = new Hashids(); // no padding
    console. log(hashids. encode( 1)); // jR
    let hashids = new Hashids( '', 10); // pad to length 10
    console. log(hashids. encode( 1)); // VolejRejNm

  4. 自定义ids显示字母
    let hashids = new Hashids ( '' , 0 , 'abcdefghijklmnopqrstuvwxyz' ); // all lowercase
    console. log(hashids. encode( 1, 2, 3)); // mdfphx
    //Default alphabet is abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
    //至少16个唯一的字母

  5. 编码十六机制而不是数字
    let id = hashids. encodeHex( '507f1f77bcf86cd799439011'); // y42LW46J9luq3Xq9XMly
    let hex = hashids. decodeHex(id); // 507f1f77bcf86cd799439011

陷阱:

  • 尽管仅仅加密一个数字,返回的也是数组
  • 不支持负数加密
  • 如加密的不是数组,则返回空字符串
    let id = hashids. encode( '123a');
    console. log(id === ''); // true


http://www.ppmy.cn/news/662173.html

相关文章

whois查询实现

可以从 https://www.iana.org/ 免费查询 很多库都是从这个网页查询出来的 也可以拿到各 顶级域名的whoisServer,查询对应43端口,拿到whois信息 命令查询 linux 安装whois 工具 whois (domain) 即可查询

java中父进程与子进程

转自:https://my.oschina.net/hosee/blog/509557 以前在学习操作系统的时候,一直记得的父线程死后,子线程也消失了。然而今天在查资料中,发现有点疑惑,在此记录一下。 Java编写的程序都运行在Java虚拟机(…

Home...

见了Tencent,IBM,Skyworth,ZTE后,一脸的激动。 路没什么两样,人倒是区别蛮大, 呵呵,号称中国硅谷。我来描述一下这个地方: --------------------- 公车按路段收费,整天给…

Java中的父线程与子线程

转自: https://my.oschina.net/hosee/blog/509557 以前在学习操作系统的时候,一直记得的父线程死后,子线程也消失了。然而今天在查资料中,发现有点疑惑,在此记录一下。 Java编写的程序都运行在Java虚拟机(JVM&#x…

JAVA锁的膨胀过程

为什么80%的码农都做不了架构师?>>> 首先简单说下先偏向锁、轻量级锁、重量级锁三者各自的应用场景: 偏向锁:只有一个线程进入临界区;轻量级锁:多个线程交替进入临界区;重量级锁:多…

ConcurrentHashMap 分段锁

ConcurrentHashMap 继承自AbstractMap类&#xff08;AbstractMap实现了Map接口&#xff09;&#xff0c;用来替换其他线程安全的Map容器。例如&#xff1a; Hashtable 和Collections.synchronizedMap(new HashMap<String,String>())&#xff1b; 另外&#xff0c;说到Co…

behavios

什么是behavios&#xff1f; behaviors 是小程序中&#xff0c;用于实现组件间代码共享的特性&#xff0c;类似于 Vue.js 中的 “mixins”。 behaviors 的工作方式&#xff1a; 每个 behavior 可以包含一组属性、数据、生命周期函数和方法。组件引用它时&#xff0c;它的属性…

Shapes

系列文章 SFML-windows 篇 SFML-Events explained 篇 SFML-Keyboard, mouse and joystick 篇 SFML-Using OpenGL in a SFML window 篇 SFML-Drawing 2D stuff 篇 SFML-Shapes 篇 SFML-Sprites and textures 篇 文章目录 系列文章一、Introduction二、Common shape properties颜…