4.3 KiB
4.3 KiB
技术文档:ID 生成与校验模块
概述
本模块提供了一套轻量级的 ID 生成、验证码生成与校验功能,适用于需要唯一标识符(ID)并附带简单校验码的场景。模块基于 nanoid 库生成短小唯一的 ID,并通过自定义算法生成和验证校验码。
依赖库
uuid: (当前未实际使用,可移除)nanoid: 用于生成短、唯一、URL 安全的 ID
安装 nanoid:
pip install nanoid
函数说明
setNode(n='ff001122334455')
功能
占位函数,预留用于设置节点标识(如分布式系统中的节点 ID),当前为空实现。
参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
n |
str | 'ff001122334455' |
节点标识字符串(十六进制格式) |
返回值
无
示例
setNode('aa11bb22cc33')
⚠️ 注意:当前函数体为空(
pass),仅为未来扩展预留。
getID(size=21)
功能
使用 nanoid 生成指定长度的唯一 ID。
参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
size |
int | 21 |
生成 ID 的字符长度 |
返回值
- 类型:
str - 说明: 返回一个长度为
size的随机、唯一、URL 安全的字符串 ID
示例
id1 = getID() # 例如: "V1StGXR8_Z5jdHi6B-myT"
id2 = getID(10) # 例如: "kLmNoPqRsT"
validate_code(id, cnt=6)
功能
根据输入的 ID 字符串生成一个固定长度的数字验证码。算法将 ID 分成若干段,对每段字符的 ASCII 值求和,并取模 10 得到一位数字。
参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
id |
str | 必填 | 输入的 ID 字符串 |
cnt |
int | 6 |
期望生成的验证码位数(最多不超过分段数) |
返回值
- 类型:
str - 说明: 返回由数字组成的验证码字符串,长度为
cnt
算法逻辑
- 计算每段长度:
b = len(id) // cnt - 遍历
id中每个字符,累加其 ASCII 值 - 每累计
b个字符后,取总和模 10 作为一位验证码 - 达到
cnt位后停止
调试输出
- 打印
b(每段字符数)和cnt(验证码位数)
示例
code = validate_code("abc123xyz", 3)
# 假设 b=3,则:
# 第一段 "abc" -> (97+98+99) % 10 = 294 % 10 = 4
# 第二段 "123" -> (49+50+51) % 10 = 150 % 10 = 0
# 第三段 "xyz" -> (120+121+122) % 10 = 363 % 10 = 3
# 结果: "403"
check_code(id, code)
功能
校验给定的验证码是否与 ID 通过 validate_code 生成的验证码一致。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
id |
str | 原始 ID 字符串 |
code |
str | 待校验的验证码 |
返回值
- 类型:
bool - 说明: 若验证码匹配返回
True,否则返回False
示例
result = check_code("abc123xyz", "403") # 取决于 validate_code 的结果
print(result) # True 或 False
主程序示例(__main__)
演示了 ID 生成、验证码生成与校验的完整流程。
if __name__ == '__main__':
id = getID() # 生成 ID
code = validate_code(id) # 生成验证码
b = check_code(id, code) # 校验验证码
print(id, code, b) # 输出 ID、验证码和校验结果
输出示例
b=3, cnt=6
V1StGXR8_Z5jdHi6B-myT 258314 True
使用场景
- 短链接系统中的唯一 ID 与人工校验码
- 激活码、邀请码生成与验证
- 分布式系统中轻量级 ID 校验机制
注意事项
validate_code中的print(f'{b=}, {cnt=}')为调试信息,生产环境中建议移除或改为日志输出。- 当前
setNode未实现功能,若无需保留可删除。 uuid模块导入但未使用,建议移除以减少冗余依赖。- 校验码算法较为简单,不适用于高安全场景,仅适合防误输或基础校验。
未来优化建议
- 将校验算法替换为 CRC 或哈希截断以提高健壮性
- 支持自定义字符集和种子提升安全性
- 添加异常处理(如空 ID 输入等)
- 使用
logging替代print进行调试输出
✅ 版本: 1.0
📅 最后更新: 2025-04-05