app/django/utils/checksums.py
author Pawel Solyga <Pawel.Solyga@gmail.com>
Tue, 20 Jan 2009 22:01:02 +0000
changeset 852 c94bf642be8d
parent 54 03e267d67478
permissions -rw-r--r--
Replace css class 'notice' that is used in User profile template field help text with new 'fieldhelptext' class. Notice is part of CSS for notification bar and we want width limit just for field help text not for notification bar text. Patch by: Pawel Solyga Review by: to-be-reviewed

"""
Common checksum routines (used in multiple localflavor/ cases, for example).
"""

__all__ = ['luhn',]

LUHN_ODD_LOOKUP = (0, 2, 4, 6, 8, 1, 3, 5, 7, 9) # sum_of_digits(index * 2)

def luhn(candidate):
    """
    Checks a candidate number for validity according to the Luhn
    algorithm (used in validation of, for example, credit cards).
    Both numeric and string candidates are accepted.
    """
    if not isinstance(candidate, basestring):
        candidate = str(candidate)
    try:
        evens = sum([int(c) for c in candidate[-1::-2]])
        odds = sum([LUHN_ODD_LOOKUP[int(c)] for c in candidate[-2::-2]])
        return ((evens + odds) % 10 == 0)
    except ValueError:  # Raised if an int conversion fails
        return False