Skip to content

Instantly share code, notes, and snippets.

@fitorec
Last active March 20, 2024 19:01
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fitorec/2c221e3314e6f3e7f87216c8d4762d0c to your computer and use it in GitHub Desktop.
Save fitorec/2c221e3314e6f3e7f87216c8d4762d0c to your computer and use it in GitHub Desktop.
Suma de validación(checksum) de la CLABE Bancaria Estandarizada en MX
/**
* 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)
*/
function clabeChecksum (clabe) {
if (/^\d*$/.test(clabe) === false || clabe < 17) {
null
}
let sum = 0
for (let i = 0; i < 17; i++) {
const factor = [3, 7, 1][i % 3] // secuencia 3 7 1 3 7 1 3 7 1 3 7...
const digitoActual = +clabe.charAt(i)
sum += (digitoActual * factor) % 10
}
return (10 - (sum % 10)) % 10
}
clabeChecksum('00201007777777777') // devuelve 1
clabeChecksum('10315012415234578') // devuelve 6, este es el ejemplo del PDF
#
# 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)
#
def clabe_checksum (clabe):
if len(clabe) < 17 or not clabe.isdecimal():
return None
sum = 0
for i in range(17):
factor = [3, 7, 1][i % 3] # secuencia 3 7 1 3 7 1 3 7 1 3 7...
digitoActual = int(clabe[i])
sum += (digitoActual * factor) % 10
return (10 - (sum % 10)) % 10
# Probando
print(clabe_checksum('00201007777777777')) # devuelve 1
print(clabe_checksum('10315012415234578')) # devuelve 6, este es el ejemplo del PDF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment