用js生成10位纯数字唯一UID,并且首位不为0的算法
时间: 2023-03-26 20:01:22 浏览: 138
您好,我可以回答这个问题。可以使用以下算法生成10位纯数字唯一UID,首位不为:
1. 获取当前时间戳,精确到毫秒级别。
2. 将时间戳转换为字符串,并截取前13位。
3. 生成一个随机数,长度为3位。
4. 将时间戳和随机数拼接起来,得到一个13+3=16位的字符串。
5. 对该字符串进行MD5加密,得到一个32位的字符串。
6. 将该字符串截取前10位,即可得到一个10位纯数字唯一UID,首位不为。
希望能对您有所帮助。
相关问题
const CryptoJS = require('./crypto-js'); // 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境 const db = cloud.database(); /** * 将字符串转化为数字(若字符串唯一,则结果也具有唯一性) * * @param {String} s 需要转换的字符串 * @param {Number} n 返回的结果的数字位数 */ async function convertToUniqueDigits(s, n) { // 使用哈希算法将字符串转换为数字 const m = sha256(s); // 将哈希值转换为数字,并将结果映射到指定的位数 let x = parseInt(m, 16) % (10n); // 如果结果中有重复的数字,增加一个偏移量 while (hasDuplicateDigits(x)) { x = (x + 1) % (10n); } //检查数据库是否存在这个id const hasUID = await checkHasUid(x); //存在这个id,则重新调用该函数并增加转化结果的位数 if(hasUID>0){ return convertToUniqueDigits(s,n+1); //发现不能使用++,会无限循环 } //不存在这个ID,直接返回结果 else{ return x; } } //检查是否存在相同的uid async function checkHasUid(uid){ const res = await db.collection('user_list').where({ uid: String(uid) }).count(); return res.total } function sha256(s) { // 使用 SHA-256 哈希算法将字符串转换为哈希值 const hash = CryptoJS.SHA256(s); return hash.toString(CryptoJS.enc.Hex); } function hasDuplicateDigits(x) { // 检查数字中是否有重复的数字 const digits = String(x).split(''); return digits.length !== new Set(digits).size; } module.exports = { convertToUniqueDigits: convertToUniqueDigits };
这是一个 Node.js 云函数,用于将字符串转换为唯一的数字。它使用了 CryptoJS 库来实现 SHA-256 哈希算法,将字符串转换为哈希值。然后将哈希值映射到指定的位数,如果结果中有重复的数字,则增加一个偏移量,直到得到一个唯一的数字。它还包含了一个函数来检查数据库中是否存在相同的唯一数字,如果存在则重新调用该函数并增加转化结果的位数。最后,它返回唯一数字。
mysql随机生成32位UID
MySQL中生成32位(通常指的是4字节)的唯一标识符(UUID或称Universally Unique Identifier),可以使用`UUID()`函数或者自定义函数结合`RAND()`函数来实现。这里是一个简单的示例:
```sql
SET @uid = UUID();
```
如果想要基于随机数生成一个固定长度的整数,你可以用`CONCAT`函数将一个随机字符串和一个固定的前缀连接起来。例如,生成0-9之间的数字组合:
```sql
SET @prefix = '0123456789';
SET @random_part = LPAD(FLOOR(RAND() * POW(10, 4)), 4, '0');
SET @uid = CONCAT(@prefix, @random_part);
```
但请注意,这种方式虽然能生成看似随机的数字,但它并不是真正的UUID,并且可能不是绝对唯一的,特别是在高并发环境下。
如果你需要一个真正在全球范围内几乎不可能重复的唯一ID,还是建议使用UUID函数生成。
阅读全文