Files
CardServer/CreateRoom.js

27 lines
1.2 KiB
JavaScript
Raw Normal View History

2025-10-11 14:45:08 +08:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateStealthId = generateStealthId;
exports.isStealthId = isStealthId;
function generateStealthId(length = 32) {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
const base = chars.length;
const randomChars = (count) => Array.from({ length: count }, () => chars.charAt(Math.floor(Math.random() * base))).join('');
// 生成前 length - 1 位
const body = randomChars(length - 1);
// 将 body 每个字符的 charCode 累加,再 mod base作为校验位
const sum = body.split('').reduce((acc, c) => acc + c.charCodeAt(0), 0);
const checksum = chars.charAt(sum % base);
return body + checksum;
}
function isStealthId(id) {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
const base = chars.length;
if (!/^[A-Za-z0-9]{32}$/.test(id))
return false;
const body = id.slice(0, -1);
const expectedChecksum = id.slice(-1);
const sum = body.split('').reduce((acc, c) => acc + c.charCodeAt(0), 0);
const checksum = chars.charAt(sum % base);
return checksum === expectedChecksum;
}