Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Friday, October 16, 2026

Diff for libplaton/platon/misc/luhnchk.c between version 1.3 and 1.4

version 1.3, 2002/03/15 21:48:17 version 1.4, 2002/09/20 16:17:33
Line 4 
Line 4 
   
 int luhncheck(const char *number)  int luhncheck(const char *number)
 {  {
         register unsigned int k, sum = 0, len_number = strlen(number);          register int i, ii, num, parity, sum = 0;
           register int len_number      = strlen(number);
         for (k = len_number % 2; k < len_number; k += 2) {          register int real_len_number = 0;
   
                 if ((((int) number[k] - 48) * 2) > 9)          for (i = 0; i < len_number; i++) {
                         sum += ((((int) number[k] - 48) * 2) - 9);                  num = number[i] - 48;
                 else                  if (num < 0 || num > 9)
                         sum += (((int) number[k] - 48) * 2);                          continue;
                   real_len_number++;
         }          }
   
         for (k = (len_number % 2) ^ 1; k < len_number; k += 2)          if (real_len_number <= 0)
                 sum += ((int) number[k] - 48);                  return 0;
           parity = real_len_number % 2;
   
           for (ii = 0, i = 0; i < len_number; i++) {
                   num = number[i] - 48;
                   if (num < 0 || num > 9)
                           continue;
   
                   if (ii % 2 == parity) {
                           sum += num * 2;
                           if (num * 2 > 9)
                                   sum -= 9;
                   } else {
                           sum += num;
                   }
                   ii++;
           }
   /*
           for (ii = 0, i = 0; i < len_number; i++) {
                   num = number[i] - 48;
                   if (num < 0 || num > 9)
                           continue;
                   if (ii % 2 != parity)
                           continue;
   
         return sum % 10 ? 0 : 1;                  ii++;
           }
   */
           return ! (sum % 10);
 }  }
   
 #if defined(SELF) || defined(SELFTEST) || defined(SELF_LUHNCHK)  #if defined(SELF) || defined(SELFTEST) || defined(SELF_LUHNCHK)

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

Platon Group <platon@platon.org> http://platon.org/
Copyright © 2002-2006 Platon Group
Site powered by Metafox CMS
Go to Top