Skip to content

Instantly share code, notes, and snippets.

@johnv1977
Last active July 31, 2025 01:27
Show Gist options
  • Select an option

  • Save johnv1977/b48f1b7368feaeeed11b27822ff4db8a to your computer and use it in GitHub Desktop.

Select an option

Save johnv1977/b48f1b7368feaeeed11b27822ff4db8a to your computer and use it in GitHub Desktop.
Estándar validación Clabe Bancaría MX

Versión en Dart para el cálculo del dígito verificador de CLABE

Este código es una versión en Dart de la solución original para el cálculo del dígito verificador de la CLABE (Clave Bancaria Estandarizada) de México, originalmente creada por @fitorec en su Gist.

Mi objetivo al crear esta versión es ofrecer una alternativa para desarrolladores que trabajan con el lenguaje Dart.


Referencias y Créditos

Agradezco a @fitorec por la solución inicial, que sirvió como base para esta adaptación.


///
/// Genera la suma de validación (checksum) de los primeros 17 digitos de la Clabe
/// bancaria estandarizada, para mayor información visitar:
///
/// @link: https://es.wikipedia.org/wiki/CLABE
/// @link: https://web.archive.org/web/20100613022755/http://www.frbservices.org/files/operations/xls/CLABE_Check_Digit_Calc.xls (página 18)
/// @link https://web.archive.org/web/20081009002331/http://www.frbservices.org/files/operations/pdf/FedACHiMxManual.pdf (página 18)
///
/// Probar con `002010077777777771` and `103150124152345786`
class CardHelper {
static String _controlDigit(String clabe) {
int sum = 0;
List<int> factors = [3, 7, 1];
for (int i = 0; i < 17; i++) {
int digit = int.parse(clabe[i]);
sum += (digit * factors[i % 3]) % 10;
}
int controlDigit = (10 - (sum % 10)) % 10;
return controlDigit.toString();
}
static bool clabeIsValid(String clabe) {
if (!RegExp(r'^\d{18}').hasMatch(clabe)) {
throw ArgumentError('La CLABE debe tener 18 dígitos numéricos.');
}
String controlDigit = _controlDigit(clabe.substring(0, 17));
return controlDigit == clabe.substring(17, 18);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment