2 Common checksum routines (used in multiple localflavor/ cases, for example).
7 LUHN_ODD_LOOKUP
= (0, 2, 4, 6, 8, 1, 3, 5, 7, 9) # sum_of_digits(index * 2)
11 Checks a candidate number for validity according to the Luhn
12 algorithm (used in validation of, for example, credit cards).
13 Both numeric and string candidates are accepted.
15 if not isinstance(candidate
, basestring
):
16 candidate
= str(candidate
)
18 evens
= sum([int(c
) for c
in candidate
[-1::-2]])
19 odds
= sum([LUHN_ODD_LOOKUP
[int(c
)] for c
in candidate
[-2::-2]])
20 return ((evens
+ odds
) % 10 == 0)
21 except ValueError: # Raised if an int conversion fails