UDID、UUID、ULID 和 NanoID 的使用

UDID、UUID、ULID 和 NanoID 的使用

背景

项目登录注册需求开发。后端的图片验证码接口、注册接口、登录接口均需要提供一个唯一标识符。

UDID:Unique Device Identifier(设备唯一标识符)

从名称上也可以看出,UDID这个东西是和设备有关的,而且是只和设备有关的,有点类似于MAC地址。真机调试,然后需要把UDID这个东西添加到Provisoning Profile授权文件中,也就是把设备唯一标识符添加进去,以此来识别某一台设备。 UDID是一个40位十六进制序列,我们可以使用iTunes和Xcode来获取这个值。

UUID:Universally Unique Identifier(通用唯一标识符)

UUID 目前有 5 个版本:

版本1:在许多环境中是不切实际的,因为它需要访问唯一的,稳定的MAC地址,容易被攻击;

版本2:将版本 1 的时间戳前四位换为 POSIX 的 UID 或 GID,问题同上;

版本3:基于 MD5 哈希算法生成,生成随机分布的ID需要唯一的种子,这可能导致许多数据结构碎片化;

版本4:基于随机数或伪随机数生成,除了随机性外没有提供其他信息;

版本5:通过 SHA-1 哈希算法生成,生成随机分布的ID需要唯一的种子,这可能导致许多数据结构碎片化;

这里面常用的就是 UUID4 了,但是,即使是随机的,但是也是存在冲突的风险。

和 UUID 要么基于随机数,要么基于时间戳不同,ULID 是既基于时间戳又基于随机数,时间戳精确到毫秒,毫秒内有1.21e + 24个随机数,不存在冲突的风险,而且转换成字符串比 UUID 更加友好。

npm i uuid --save

const uuidv4 = require('uuid/v4');

// 生成一个理论上不重复的128位16进制表示的数字

uuidv4(); // 0d90c8ac-7c21-486a-a132-39177211d1d4

// 原生获取

const uuid = URL.createObjectURL(new Blob()).substr(-36)

// 相对与引入一整个库来说节约更多的资源, 但高并发等特殊场景下可能不保证唯一性

ULID:Universally Unique Lexicographically Sortable Identifier(通用唯一词典分类标识符)

特性:

与UUID的128位兼容性

每毫秒1.21e + 24个唯一ULID

按字典顺序(也就是字母顺序)排序!

规范地编码为26个字符串,而不是UUID的36个字符

使用Crockford的base32获得更好的效率和可读性(每个字符5位)

不区分大小写

没有特殊字符(URL安全)

单调排序顺序(正确检测并处理相同的毫秒)

使用:

npm i ulid

import { ulid } from ‘ulid’;

ulid();

/*

01FHZXHK8PTP9FVK99Z66GXQTX

时间戳 (48 bits) - 01FHZXHK8P

随机数 (80 bits) - TP9FVK99Z66GXQTX

*/

NanoID

使用:

npm i nanoid

import { nanoid } from 'nanoid';

model.id = nanoid();

参考

http://t.zoukankan.com/hero11223-p-6757311.html ios udid

https://blog.csdn.net/pushiqiang/article/details/117365290

https://juejin.cn/post/7070775470974828580#comment

https://juejin.cn/post/7039960318897815565 NanoID

https://zhuanlan.zhihu.com/p/472060150 NanoID

上一篇: 索爱V10麦克风体验(细腻音质、高灵敏度,让你的声音更出众)
下一篇: 软件机器码一键修改工具,电脑永久修改机器码工具,破解一机一注册码软件

相关文章

求一个数n次方后的末尾数(数论/快速幂)
【問題】漫畫還有再連載嗎 @黑街(GANGSTA.) 哈啦板
含有【抵】的成语
冰箱冷冻室温控器在哪(如何找到并更换)。
酷燃哪里下载?
如何下载快手里的视频?这3个方法很好用哦