ПРОВЕРКА РНН НА КОРРЕКТНОСТЬ | |||||||||||||||||||||||||||||||||||||||||||||||||||
Коротко:В данной статье рассказывается о методесоставления РНН, и описывается проверка"на верность" РНН. В статье естьпример функции для проверки РНН. | |||||||||||||||||||||||||||||||||||||||||||||||||||
Проверка РНН происходит по алгоритму похожему на CRC. Согласно банковским форматам. Цитирую: | |||||||||||||||||||||||||||||||||||||||||||||||||||
---- Структура РНН. РНН (Регистрационный Номер Налогоплательщика) представляет собой 12-ти разрядное число. | |||||||||||||||||||||||||||||||||||||||||||||||||||
Алгоритм вычисления контрольного разряда РНН | |||||||||||||||||||||||||||||||||||||||||||||||||||
* Каждому разряду РНН (счет сверху вниз), исключая последний 12-й разряд, присваивается вес от 1 до 10 (т.е. вес не может иметь значение больше 10). 11-й разряд имеет вес равный 1. Пример 1. | |||||||||||||||||||||||||||||||||||||||||||||||||||
Определяется сумма произведений значений каждого разряда на его вес | |||||||||||||||||||||||||||||||||||||||||||||||||||
* Полученная сумма делится на 11 и выделяется целая часть. C=S/11 * Определяется разница между суммой произведений и целочисленным вхождением по модулю 11 в эту сумму. K=S-C*11 * Если полученная разница меньше 10, то она является значением контрольного разряда. В противном случае, расчет повторяется, начиная с веса 2. Если результат при 10 циклах повторения расчета всегда имеет значение больше или равно 10, то данное число для РНН исключается. Пример: Вычислить контрольный разряд для РНН 60040000009К | |||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||
---- | |||||||||||||||||||||||||||||||||||||||||||||||||||
Дополнение | |||||||||||||||||||||||||||||||||||||||||||||||||||
1. Разъясняем, что при вычислении контрольного разряда РНН в случае, если после первого прохода контрольное число получается больше 10, расчет повторяется, но каждому разряду вес присваивается, начиная с 2. Для третьего прохода соответственно с 3 и т.д. | |||||||||||||||||||||||||||||||||||||||||||||||||||
Пример: Вычислить контрольную сумму разряда для РНН 60050000742К Проход №1
РНН: 600500007425 | |||||||||||||||||||||||||||||||||||||||||||||||||||
2. Значение всех разрядов РНН не должно быть одинаковым. То есть числа не допускаются как РНН Пример: 111111111111, 333333333333 и т.д. --- | |||||||||||||||||||||||||||||||||||||||||||||||||||
Функция проверки РНН на Pascal. Данная функция проверки была применена в программе формирования пенсионных отчислений Visual ГЦВП Pro, начиная с версии 1.1.1.112. Программу можно слить с www.lio.kz --- // Функция проверяет правильность введенного РНН по контрольной сумме // ----------------- // Параметры: // rnn:string - РНН // Выходные параметры: // boolean - если истина тогда РНН верный, иначе не верный // ----------------- // Комментарий: // ----------------- // Дата создания: 23.11.2003 function TestRNN(rnn:String):boolean; const // маска чек суммы mask:array[1..10,1..11]of byte= ((1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1), (2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2), (3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3), (4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4), (5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6), (7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7), (8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8), (9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9), (10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); var I: integer; Ar: array[1..12]of byte; c1: integer; c: integer; k: integer; begin Result:=false; if Length(rnn)<>12 then exit; try // заполнение массива for i:=1 to 12 do ar[i]:=StrToInt(rnn[i]); // перебег по маске for i:=1 to 10 do begin // подсчет c:=(ar[1]*mask[i,1])+ (ar[2]*mask[i,2])+ (ar[3]*mask[i,3])+ (ar[4]*mask[i,4])+ (ar[5]*mask[i,5])+ (ar[6]*mask[i,6])+ (ar[7]*mask[i,7])+ (ar[8]*mask[i,8])+ (ar[9]*mask[i,9])+ (ar[10]*mask[i,10])+ (ar[11]*mask[i,11]); c1:=c div 11; k:=c-c1*11; if k<10 then begin Result:=ar[12]=k; break; end; end; except end; end; --- Имя: Абдуллатипов Алик --- | |||||||||||||||||||||||||||||||||||||||||||||||||||
безсогласия автора публикация, распространениезапрещена |