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)
- 인도: 아드하르 번호
- 브라질: Cadastro de Pessoas Físicas (CPF)
각 시스템은 고유한 구조와 규칙을 가지고 있지만, 각국에서 유사한 목적을 수행합니다.
참고 자료
- SEGOB (Secretaría de Gobernación). "CURP - Trámites." Gobierno de México, https://www.gob.mx/curp/. Accessed 4 Aug. 2024.
- RENAPO (Registro Nacional de Población e Identidad). "Instructivo Normativo para la Asignación de la Clave Única de Registro de Población." Gobierno de México, https://www.gob.mx/cms/uploads/attachment/file/79053/InstructivoNormativoCURP.pdf. Accessed 4 Aug. 2024.