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 );
}
}
}