CURP 生成器
介绍
CURP(Clave Única de Registro de Población)是墨西哥用于身份识别的唯一字母数字代码。该工具生成有效的随机 CURP 以用于测试场景,符合官方格式和验证规则。重要的是要注意,这些生成的 CURP 与真实个人无关,仅应用于测试目的。
CURP 的结构
CURP 由 18 个字符组成,格式如下:
- 父姓的第一个字母
- 父姓的第一个元音(不包括第一个字母)
- 母姓的第一个字母
- 名字的第一个字母 5-10. 出生日期(YYMMDD 格式)
- 性别(H 代表男性,M 代表女性) 12-13. 出生州的两个字母代码 14-16. 每个姓名组成部分的第一个内部辅音(父姓、母姓、名字)
- 区分数字(2000 年之前出生的人为 0-9,2000 年及之后出生的人为 A-Z)
- 校验位(0-9)
生成随机 CURP 的算法
- 生成姓名组成部分的随机字母
- 生成随机出生日期
- 随机选择性别
- 随机选择有效的州代码
- 生成姓名组成部分的随机辅音
- 根据出生年份确定区分数字
- 计算校验位
- 将所有组成部分组合形成 CURP
验证规则
- 所有字母字符必须为大写
- 出生日期必须是有效日期(包括闰年考虑)
- 州代码必须是有效的墨西哥州代码
- 区分数字必须与出生年份相对应
- 校验位必须正确计算
- 处理姓名的特殊情况(例如,单字母姓氏、包含 Ñ 的名字)
用例
-
软件测试:开发人员可以使用该工具生成有效的 CURP,用于测试用户注册系统、数据库操作或任何需要 CURP 输入的软件。
-
数据隐私:在演示软件或展示数据时,使用随机生成的 CURP 有助于保护个人隐私。
-
性能测试:生成大量唯一的 CURP 以测试系统在负载下的性能。
-
培训和教育:在有关墨西哥身份识别系统的教育材料中使用生成的 CURP,而不使用真实个人数据。
CURP 在墨西哥的历史
CURP 系统于 1996 年由墨西哥政府引入,作为现代化和标准化个人识别的一部分。它取代了各种其他识别系统,成为墨西哥官僚机构的重要组成部分,用于从学校注册到报税的各个方面。
多年来,CURP 系统经历了几次修改:
- 2011 年,引入了区分数字,以区分 2000 年之前和之后出生的人。
- 2012 年,修改了校验位的计算算法,以提高唯一性。
示例
以下是用各种编程语言生成随机 CURP 的代码示例:
import random
import string
from datetime import datetime, timedelta
def generate_curp():
# 生成姓名组成部分
paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
maternal = random.choice(string.ascii_uppercase)
given = random.choice(string.ascii_uppercase)
# 生成出生日期
start_date = datetime(1940, 1, 1)
end_date = datetime.now()
random_date = start_date + timedelta(days=random.randint(0, (end_date - start_date).days))
date_str = random_date.strftime("%y%m%d")
# 生成性别
gender = random.choice(['H', 'M'])
# 生成州代码
states = ['AS', 'BC', 'BS', 'CC', 'CL', 'CM', 'CS', 'CH', 'DF', 'DG', 'GT', 'GR', 'HG', 'JC', 'MC', 'MN', 'MS', 'NT', 'NL', 'OC', 'PL', 'QT', 'QR', 'SP', 'SL', 'SR', 'TC', 'TS', 'TL', 'VZ', 'YN', 'ZS']
state = random.choice(states)
# 生成辅音
consonants = ''.join(random.choices(string.ascii_uppercase.translate(str.maketrans('', '', 'AEIOU')), k=3))
# 生成区分数字
diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)
# 生成校验位(此示例简化处理)
check_digit = random.choice(string.digits)
return f"{paternal}{maternal}{given}{date_str}{gender}{state}{consonants}{diff_digit}{check_digit}"
## 生成并打印随机 CURP
print(generate_curp())
其他国家的替代方案
虽然 CURP 是墨西哥特有的,但其他国家有类似的识别系统:
- 美国:社会安全号码(SSN)
- 加拿大:社会保险号码(SIN)
- 印度:Aadhaar 号码
- 巴西:Cadastro de Pessoas Físicas(CPF)
每个系统都有其自身的结构和规则,但它们在各自国家中发挥着类似的作用。
参考文献
- SEGOB(Secretaría de Gobernación)。“CURP - Trámites。”墨西哥政府,https://www.gob.mx/curp/。访问日期 2024 年 8 月 4 日。
- RENAPO(Registro Nacional de Población e Identidad)。“分配唯一人口登记代码的规范说明。”墨西哥政府,https://www.gob.mx/cms/uploads/attachment/file/79053/InstructivoNormativoCURP.pdf。访问日期 2024 年 8 月 4 日。