mirror of
https://github.com/django/django.git
synced 2024-12-24 18:16:19 +00:00
Fixed #8229: Added handling for a special case in the validation of Spanish ID numbers. Thanks to Marc Garcia for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8405 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
77c949289e
commit
cbcc415934
@ -108,7 +108,7 @@ class ESIdentityCardNumberField(RegexField):
|
|||||||
if not letter2:
|
if not letter2:
|
||||||
number, letter2 = number[:-1], int(number[-1])
|
number, letter2 = number[:-1], int(number[-1])
|
||||||
checksum = cif_get_checksum(number)
|
checksum = cif_get_checksum(number)
|
||||||
if letter2 in [checksum, self.cif_control[checksum]]:
|
if letter2 in (checksum, self.cif_control[checksum]):
|
||||||
return value
|
return value
|
||||||
else:
|
else:
|
||||||
raise ValidationError, self.error_messages['invalid_cif']
|
raise ValidationError, self.error_messages['invalid_cif']
|
||||||
@ -180,5 +180,5 @@ class ESProvinceSelect(Select):
|
|||||||
def cif_get_checksum(number):
|
def cif_get_checksum(number):
|
||||||
s1 = sum([int(digit) for pos, digit in enumerate(number) if int(pos) % 2])
|
s1 = sum([int(digit) for pos, digit in enumerate(number) if int(pos) % 2])
|
||||||
s2 = sum([sum([int(unit) for unit in str(int(digit) * 2)]) for pos, digit in enumerate(number) if not int(pos) % 2])
|
s2 = sum([sum([int(unit) for unit in str(int(digit) * 2)]) for pos, digit in enumerate(number) if not int(pos) % 2])
|
||||||
return 10 - ((s1 + s2) % 10)
|
return (10 - ((s1 + s2) % 10)) % 10
|
||||||
|
|
||||||
|
@ -167,6 +167,8 @@ Traceback (most recent call last):
|
|||||||
ValidationError: [u'Invalid checksum for NIE.']
|
ValidationError: [u'Invalid checksum for NIE.']
|
||||||
>>> f.clean('B38790911')
|
>>> f.clean('B38790911')
|
||||||
'B38790911'
|
'B38790911'
|
||||||
|
>>> f.clean('B31234560')
|
||||||
|
'B31234560'
|
||||||
>>> f.clean('B-3879091A')
|
>>> f.clean('B-3879091A')
|
||||||
'B3879091A'
|
'B3879091A'
|
||||||
>>> f.clean('B 38790917')
|
>>> f.clean('B 38790917')
|
||||||
|
Loading…
Reference in New Issue
Block a user