Skip to content

Instantly share code, notes, and snippets.

@alejamp
Last active November 22, 2023 19:47
Show Gist options
  • Save alejamp/9cc051899f6e9e620f2fa5c9d6e8c07f to your computer and use it in GitHub Desktop.
Save alejamp/9cc051899f6e9e620f2fa5c9d6e8c07f to your computer and use it in GitHub Desktop.
Dart Mexican CURP Validation
void main() {
var res = CURP.curpValida('XXXXXXXXXXXXX');
print("Result:" + res.toString());
}
class CURP {
static bool curpValida(String curp) {
var re = new RegExp(r"^([A-Z][AEIOUX][A-Z]{2}\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])[HM](?:AS|B[CS]|C[CLMSH]|D[FG]|G[TR]|HG|JC|M[CNS]|N[ETL]|OC|PL|Q[TR]|S[PLR]|T[CSL]|VZ|YN|ZS)[B-DF-HJ-NP-TV-Z]{3}[A-Z\d])(\d)$",
caseSensitive: false,
multiLine: false,
);
var validado = re.allMatches(curp);
var matches = validado.toList();
if (matches.length == 0) //Coincide con el formato general?
{
print("CURP No matches with RegEx");
return false;
}
print(matches[0][2].toString());
var digitVerif = matches[0][2].toString();
var digitoVerifCalculado = digitoVerificador(matches[0][1].toString()).toString();
if (digitoVerifCalculado != digitVerif) {
print("Digito verificador CURP digito: " + matches[2].toString() +" calculado:" + digitVerif);
return false;
}
return true;
}
//Validar que coincida el dígito verificador
static digitoVerificador(curp17) {
//Fuente https://consultas.curp.gob.mx/CurpSP/
var diccionario = "0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ",
lngSuma = 0.0,
lngDigito = 0.0;
for(var i=0; i<17; i++)
lngSuma = lngSuma + diccionario.indexOf(curp17[i]) * (18 - i);
lngDigito = 10 - lngSuma % 10;
if (lngDigito == 10) return 0;
return lngDigito;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment