Fórmula de Luhn

algoritmos
Instrucciones

La fórmula de Luhn o fórmula del módulo 10, se usa para comprobar las tarjetas de crédito. Aquí os pongo el código:

"""Luhn formula -- how to check a credit card number"""

def luhn(nCard):
    nSum=0
    nRest=nCard
 
    while nRest>0:
 
        # Odd position
        nRest,nDigit=divmod(nRest,10)
        nSum+=nDigit
    
        # Even position
        nRest,nDigit=divmod(nRest,10)
        if nDigit<5:
            nSum+=2*nDigit
        else:
            nSum+=2*nDigit-9
 
    return nSum%10
 
 def check_card(nCard):
    """Return true if the credit-card number is valid"""
    return luhn(nCard)==0

Opciones de visualización de comentarios

Seleccione su manera preferida de mostrar los comentarios y haga click en 'Guardar opciones' para activar sus cambios.

Versión más compacta

Una versión algo más compacta:

"""Luhn formula -- how to check a credit card number"""

def luhn(nCard):
    s=str(int(nCard))
    
    return sum(
                [int(i) for i in s[-1::-2]] + 
                [sum(divmod(2*int(i),10)) for i in s[-2::-2]]
              )%10

     
def check_card(nCard):
    """Return true if the credit-card number is valid"""
    return luhn(nCard)==0