СНИЛС - проверка корректности
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
СНИЛС - проверка корректности
Как обычно на коленке. Если устроит.
Код: Выделить всё
program
!
! на основе
! https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE#%D0%A1%D1%82%D1%80%D0%B0%D1%85%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BD%D0%BE%D0%BC%D0%B5%D1%80_%D0%B8%D0%BD%D0%B4%D0%B8%D0%B2%D0%B8%D0%B4%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BB%D0%B8%D1%86%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE_%D1%81%D1%87%D1%91%D1%82%D0%B0_(%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F)
!
map
checksnils(string snils),byte
end
CODE
if CheckSnils(deformat('112-233-445 95',@P###-###-### ##P))
message('snils ok')
end
checksnils procedure(string snils)!,byte
c byte
s long
n byte
t long
code
! если не 11 - ошибка
if len(clip(snils)) <> 11
return false
end
! контрольный номер можно проверить только после номера 1001998
t = snils[1:9]
if t <= 1001998
return true
end
! суммируем
loop c = 1 to 9
s += snils[c] * (10-c)
end
! вычисляем контрольный номер
loop
if s < 100
n = s
break
elsif s=100 or s=101
n = 0
break
else
s = s % 101
cycle
end
end
! сверяем
if n = snils[10:11]
return true
end
! ничего не подошло - ошибка
return false
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса