Skip to content

uuid() 随机串 ​

🎲 生成指定长度和进制的随机字符串,用于给导出的客户端证书 p12 文件名加随机后缀。

📎 源码在线查看:script.js#L79-L112(uuid)

签名 ​

javascript
function uuid(len, radix)
// uuid(10, 16) -> "a3F9c2D1b7" 之类
参数含义
len目标字符串长度
radix字符集基数(默认 62,即 0-9A-Za-z)

用途 ​

证书导出时文件名形如 /sdcard/Download/<包名><uuid>.p12。加随机后缀避免多次导出覆盖同名文件——同一证书可能被多次取,每次都导出一份独立的,均可用。

javascript
'/sdcard/Download/' + packageName + uuid(10, 16) + '.p12'

字符集 ​

javascript
var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');

62 个字符:0-9(10)+ A-Z(26)+ a-z(26)。

紧凑形式(传了 len) ​

javascript
if (len) {
  for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
}
  • Math.random() * radix:0 ~ radix 的随机浮点
  • 0 | x:按位或 0 = 取整(floor)
  • 从 chars 取一个字符,循环 len 次

证书导出时 uuid(10, 16):从 62 字符集的前 16 个(0-9A-F,即十六进制字符)里取 10 个。

rfc4122 形式(未传 len) ​

javascript
} else {
  uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';  // 固定分隔符
  uuid[14] = '4';                                   // version 4
  for (i = 0; i < 36; i++) {
    if (!uuid[i]) {
      r = 0 | Math.random() * 16;
      uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];  // i==19 时按 rfc4122 设高位
    }
  }
}

标准 UUID v4 格式 xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx。证书导出时都传了 len,这个分支实际不会走到,但保留以备他用。

相关文档 ​

基于 VitePress 构建 · 教学用途