(1) Структура 18 идентификационного номера
ИНН гражданина представляет собой характерный комбинированный код, состоящий из семнадцатизначного кода тела и однозначного контрольного кода.
Порядок слева направо: шестизначный код адреса, восьмизначный код даты рождения, трехзначный код последовательности и однозначный контрольный код.
1. Код адреса
Указывает код административного деления округа (города, баннера, района), где находится постоянное место жительства объекта кодирования, и должен применяться в соответствии с положениями GB/T2260.
2. Код даты рождения
Указывает год, месяц и день рождения объекта кодирования. Реализовано в соответствии с положениями GB/T7408. Между кодами года, месяца и дня нет разделителя.
3. Код последовательности
Указывает, что в пределах территории, определенной одним и тем же кодом адреса, порядковые номера присваиваются людям, родившимся в один и тот же год, месяц и день. Нечетные номера кодов последовательности присваиваются мужчинам, а четные номера - женщинам. .
4. Проверьте этапы расчета кода.
(1) Формула взвешенного суммирования семнадцатизначного кода онтологии.
S = Sum(Ai * Wi), i = 0,..., 16, сначала просуммируйте веса первых 17 цифр
Ai: представляет цифровое значение идентификационного номера в i-й позиции (0–9).
Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (указывает весовой коэффициент на i-й позиции)
(2) Модель расчета
Y = мод(S, 11)
(3) В соответствии с модулем найдите соответствующий контрольный код.
Д: 0 1 2 3 4 5 6 7 8 9 10
Код проверки: 1 0 X 9 8 7 6 5 4 3 2
(2) Пример программы для получения последней цифры проверочного кода на основе 17-значного кода онтологии.
Скопируйте код кода следующим образом:
общественный класс Id18 {
int[] Weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2} //Вес семнадцатизначного кода онтологии;
char[] validate={ '1','0','X','9','8','7','6','5','4','3','2'} ; //mod11, соответствующий значению символа проверочного кода
общественный символ getValidateCode (String id17) {
интервал суммы = 0;
режим int = 0;
for(int i=0;i<id17.length();i++){
sum=sum+Integer.parseInt(String.valueOf(id17.charAt(i)))*weight[i];
}
режим = сумма% 11;
вернуть проверку [режим];
}
public static void main(String[] args){
Тест Id18 = новый Id18();
System.out.println("Код проверки этого удостоверения личности:"+test.getValidateCode("14230219700101101")); //Код подтверждения этого удостоверения личности: 3
}
}
(3) Объяснение
1. Программа может получить соответствующий проверочный код на основе существующего 17-значного кода онтологии.
2. Эта программа может удалять идентификационные номера с неправильными кодами проверки.
3. В качестве года рождения 15-значного удостоверения личности используются последние 2 цифры года без последней 1 цифры контрольного кода.
4. Полное удостоверение личности состоит из 18 цифр, причем последняя контрольная цифра может быть не цифрой. В одном из наших проектов база данных сохраняет первые 17 цифр, что может ускорить некоторые операторы SQL (например, внутреннее соединение)! ! !