Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as Python by 1123 ( 7 years ago )
# =============================================================================
# СНИЛС
# =============================================================================
_snils_re = re.compile(r'^\d{3}-\d{3}-\d{3} \d{2}$') # СНИЛС
def snils_validator(value):
u"""Валидатор СНИЛС.
Проверяет корректность формата и контрольное число (последние две цифры).
:raises django.core.exceptions.ValidationError: Если аргумент value
содержит значение, несоответствующее формату СНИЛС, либо контрольное
число некорректно.
"""
value = six.text_type(value)
if not _snils_re.match(value):
raise ValidationError(u'СНИЛС должен быть в формате ###-###-### ##')
if value[:11] <= u'001-001-998':
return
numbers = (int(ch) for ch in reversed(value[:11]) if ch.isdigit())
checksum = int(value[12:14])
summa = sum(i * n for i, n in enumerate(numbers, 1))
if summa > 101:
summa %= 101
if (summa < 100 and summa != checksum or
summa in (100, 101) and checksum != 0):
raise ValidationError(u'не пройдена проверка контрольного числа')
is_snils_valid = partial(validate_value, validator=snils_validator)
Revise this Paste