Pour faire suite à mes posts Algorithme de Luhn – Implémentation C++,
Algorithme de Luhn – Implémentation C# et Algorithme de Luhn – Implémentation C, voici une version de l’agorithme implémenté en Python.

Dans la solution que je propose ci-dessous, je suis arrivé au résultat suivant :

  • le code comptabilisé est constitué des 88 caractères significatifs de la suite d’instructions :
    s,i=0,16 while i>0: i-=1 v=ord(l[15-i])-48<<i%2 if(v<9): s+=v-9 else: s+=v return s%10<1
  • le temps d’exécution mesuré pour 1000000 d’itérations est de 11,58 secondes sur un Intel Core 2 Duo cadencé à 2,13 Ghz sous Ubuntu 9.04.

Comparé à l’implémentation en C, le code comptabilisé augmente de 20 caractères et le temps d’exécution mesuré augmente de 11,42 secondes. Le code a été interprété par Python 2.6.2.

Si vous avez des commentaires, des suggestions ou si vous avez une solution plus compacte ou plus rapide, n’hésitez pas à m’en faire part.

#!/usr/bin/python
# -*- coding: latin-1 -*-

import time

def luhn( l ):

    # début du code comptabilisé

    s, i = 0, 16

    while i > 0:
        i -= 1
        v = ord( l[ 15 - i ] ) - 48 << i % 2
        if ( v > 9 ):
            s += v - 9
        else:
            s += v

    return s % 10 < 1

    # fin du code comptabilisé

def main():
    start = time.time()

    # début du temps d'exécution mesuré

    l = 1000000L

    while l > 0:
        l -= 1
        luhn( "4970100000300521" )

    # fin du temps d'exécution mesuré

    end = time.time()

    print "Le temps d'exécution de la fonction est de %.2f secondes.\n"%( end - start )