Generador aleatori de CURP per a proves de programari
Genera CURPs (Clau Única de Registre de Població) vàlids i aleatoris per a fins de prova. Aquesta eina crea CURPs que compleixen amb el format oficial mexicà i les normes de validació, sense utilitzar informació personal real.
Generar CURP
Documentació
Generador de CURP
Introducció
El CURP (Clave Única de Registro de Población) és un codi alfanumèric únic utilitzat a Mèxic per a fins d'identificació. Aquesta eina genera CURPs vàlids i aleatoris per a escenaris de prova, complint amb el format oficial i les regles de validació. És important notar que aquests CURPs generats no estan vinculats a persones reals i només s'han d'utilitzar per a fins de prova.
Estructura del CURP
Un CURP consisteix en 18 caràcters en el següent format:
- Primera lletra del cognom paterno
- Primera vocal del cognom paterno (excloent la primera lletra)
- Primera lletra del cognom matern
- Primera lletra del nom 5-10. Data de naixement (format YYMMDD)
- Gènere (H per a homes, M per a dones) 12-13. Codi de dues lletres per a l'estat de naixement 14-16. Primera consonant interna de cada component del nom (cognom paterno, cognom matern, nom)
- Dígit de diferenciació (0-9 per a persones nascudes abans de 2000, A-Z per a les nascudes a partir de 2000)
- Dígit de control (0-9)
Algoritme per a generar un CURP aleatori
- Generar lletres aleatòries per als components del nom
- Generar una data de naixement aleatòria
- Seleccionar aleatòriament el gènere
- Seleccionar aleatòriament un codi d'estat vàlid
- Generar consonants aleatòries per als components interns del nom
- Determinar el dígit de diferenciació en funció de l'any de naixement
- Calcular el dígit de control
- Combinar tots els components per formar el CURP
Regles de validació
- Tots els caràcters alfabètics han de ser en majúscules
- La data de naixement ha de ser una data vàlida (incloent la consideració d'anys de traspàs)
- El codi d'estat ha de ser un codi d'estat mexicà vàlid
- El dígit de diferenciació ha de correspondre amb l'any de naixement
- El dígit de control ha de ser calculat correctament
- Gestionar casos especials per als noms (per exemple, cognoms de lletra única, noms amb Ñ)
Casos d'ús
-
Proves de programari: Els desenvolupadors poden utilitzar aquesta eina per generar CURPs vàlids per a provar sistemes d'inscripció d'usuaris, operacions de base de dades o qualsevol programari que requereixi entrada de CURP.
-
Privadesa de dades: En demostrar programari o presentar dades, utilitzar CURPs generats aleatòriament ajuda a protegir la privadesa dels individus.
-
Proves de rendiment: Generar grans conjunts de CURPs únics per provar el rendiment del sistema sota càrrega.
-
Formació i educació: Utilitzar CURPs generats en materials educatius sobre sistemes d'identificació mexicans sense utilitzar dades personals reals.
Història del CURP a Mèxic
El sistema CURP es va introduir el 1996 pel govern mexicà com a part d'un esforç per modernitzar i estandarditzar la identificació personal. Va substituir diversos altres sistemes d'identificació i es va convertir en un element crucial de la burocràcia mexicana, utilitzat per a tot, des de l'inscripció escolar fins a la presentació d'impostos.
Al llarg dels anys, el sistema CURP ha sofert diverses modificacions:
- El 2011, es va introduir el dígit de diferenciació per distingir entre persones nascudes abans i després de 2000.
- El 2012, s'ha modificat l'algoritme per calcular el dígit de control per millorar la unicitat.
Exemples
Aquí hi ha exemples de codi per generar CURPs aleatoris en diversos llenguatges de programació:
1import random
2import string
3from datetime import datetime, timedelta
4
5def generate_curp():
6 # Generar components del nom
7 paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
8 maternal = random.choice(string.ascii_uppercase)
9 given = random.choice(string.ascii_uppercase)
10
11 # Generar data de naixement
12 start_date = datetime(1940, 1, 1)
13 end_date = datetime.now()
14 random_date = start_date + timedelta(days=random.randint(0, (end_date - start_date).days))
15 date_str = random_date.strftime("%y%m%d")
16
17 # Generar gènere
18 gender = random.choice(['H', 'M'])
19
20 # Generar codi d'estat
21 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']
22 state = random.choice(states)
23
24 # Generar consonants
25 consonants = ''.join(random.choices(string.ascii_uppercase.translate(str.maketrans('', '', 'AEIOU')), k=3))
26
27 # Generar dígit de diferenciació
28 diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)
29
30 # Generar dígit de control (simplificat per a aquest exemple)
31 check_digit = random.choice(string.digits)
32
33 return f"{paternal}{maternal}{given}{date_str}{gender}{state}{consonants}{diff_digit}{check_digit}"
34
35## Generar i imprimir un CURP aleatori
36print(generate_curp())
37
1function generateCURP() {
2 const vowels = 'AEIOU';
3 const consonants = 'BCDFGHJKLMNPQRSTVWXYZ';
4 const 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'];
5
6 const randomLetter = () => String.fromCharCode(65 + Math.floor(Math.random() * 26));
7 const randomVowel = () => vowels[Math.floor(Math.random() * vowels.length)];
8 const randomConsonant = () => consonants[Math.floor(Math.random() * consonants.length)];
9
10 const paternal = randomLetter() + randomVowel();
11 const maternal = randomLetter();
12 const given = randomLetter();
13
14 const now = new Date();
15 const start = new Date(1940, 0, 1);
16 const randomDate = new Date(start.getTime() + Math.random() * (now.getTime() - start.getTime()));
17 const dateStr = randomDate.toISOString().slice(2, 10).replace(/-/g, '');
18
19 const gender = Math.random() < 0.5 ? 'H' : 'M';
20 const state = states[Math.floor(Math.random() * states.length)];
21
22 const internalConsonants = randomConsonant() + randomConsonant() + randomConsonant();
23
24 const diffDigit = parseInt(dateStr.slice(0, 2)) < 20 ?
25 Math.floor(Math.random() * 10).toString() :
26 String.fromCharCode(65 + Math.floor(Math.random() * 26));
27
28 const checkDigit = Math.floor(Math.random() * 10).toString();
29
30 return `${paternal}${maternal}${given}${dateStr}${gender}${state}${internalConsonants}${diffDigit}${checkDigit}`;
31}
32
33// Generar i registrar un CURP aleatori
34console.log(generateCURP());
35
Alternatives en altres països
Si bé el CURP és únic a Mèxic, altres països tenen sistemes d'identificació similars:
- Estats Units: Número de Seguretat Social (SSN)
- Canadà: Número d'Assegurança Social (SIN)
- Índia: Número Aadhaar
- Brasil: Cadastro de Pessoas Físicas (CPF)
Cada sistema té la seva pròpia estructura i regles, però serveixen a fins similars en els seus respectius països.
Referències
- SEGOB (Secretaría de Gobernación). "CURP - Tràmits." Gobierno de México, https://www.gob.mx/curp/. Accedit el 4 d'agost de 2024.
- RENAPO (Registro Nacional de Población e Identidad). "Instructiu Normatiu per a l'Assignació de la Clau Única de Registro de Población." Gobierno de México, https://www.gob.mx/cms/uploads/attachment/file/79053/InstructivoNormativoCURP.pdf. Accedit el 4 d'agost de 2024.
Comentaris
Fes clic a la notificació de comentaris per començar a donar comentaris sobre aquesta eina
Eines relacionades
Descobreix més eines que podrien ser útils per al teu flux de treball