Source code for localflavor.generic.checksums
"""Common checksum routines."""
import warnings
from django.utils import six
from stdnum import ean as stdnum_ean
from stdnum import luhn as stdnum_luhn
from localflavor.deprecation import RemovedInLocalflavor30Warning
__all__ = ['luhn', 'ean']
[docs]def luhn(candidate):
"""
Checks a candidate number for validity according to the Luhn algorithm.
Luhn algorithm is used in validation of, for example, credit cards.
Both numeric and string candidates are accepted.
.. deprecated:: 2.2
Use the luhn function in the python-stdnum_ library instead.
.. _python-stdnum: https://arthurdejong.org/python-stdnum/
"""
warnings.warn(
'luhn is deprecated in favor of the luhn function in the python-stdnum library.',
RemovedInLocalflavor30Warning,
)
if not isinstance(candidate, six.string_types):
candidate = str(candidate)
# Our version returned True for empty strings.
if candidate == '':
return True
return stdnum_luhn.is_valid(candidate)
[docs]def ean(candidate):
"""
Checks a candidate number for validity according to the EAN checksum calculation.
Note that this validator does not enforce any length checks (usually 13 or 8).
http://en.wikipedia.org/wiki/International_Article_Number_(EAN)
.. deprecated:: 2.2
Use the ean function in the python-stdnum_ library instead.
.. _python-stdnum: https://arthurdejong.org/python-stdnum/
"""
warnings.warn(
'ean is deprecated in favor of the ean function in the python-stdnum library.',
RemovedInLocalflavor30Warning,
)
if not isinstance(candidate, six.string_types):
candidate = str(candidate)
return stdnum_ean.is_valid(candidate)