Algorithme de Luhn - Implémentation C#

27 July 2006 | Programmation

Pour faire suite à mon post Algorithme de Luhn - Implémentation C++, voici une version de l’agorithme implémenté en C#.

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

  • le code comptabilisé est constitué des 77 caractères significatifs de la suite d’instructions :
    int s=0,i=16,v;while(i–>0){v=l[15-i]-’0′<9)?v-9:v;}return s%10<1;
  • le temps d’exécution mesuré pour 1000000 d’itérations est de 0,14 secondes sur un AMD Athlon 2600+ sous Windows XP

Comparé à l’implémentation en C++, le code comptabilisé augmente de 9 caractères et le temps d’exécution mesuré augmente de 0,05 secondes.

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.

using System;     

namespace HowTo
{
     class Luhn
     {
         static bool luhn( string l )
         {
             // début du code comptabilisé 

            int s=0, i=16, v;    

            while ( i-- > 0 )
            {
                 v = l[15-i] - '0' << i % 2;
                 s += ( v > 9 )?v-9:v;
             }  

             return s % 10 < 1; 

             // fin du code comptabilisé
         }  

         [STAThread]
         static void Main(string[] args)
         {
             int start = Environment.TickCount; 

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

             ulong l = 1000000L; 

             while ( l-- > 0 )
                luhn( "4970100000300521" ); 

             // fin du temps d'exécution mesuré 

             int end = Environment.TickCount;  

             Console.WriteLine( "Le temps d'exécution de la fonction est de {0:f2} secondes.\n", (float) ( end - start ) / (float) 1000 );
        }
    }
}

Poster un commentaire