Devido às necessidades do projeto, escrevi um método C# para verificação de cartão de identificação com base em informações online. Este método foi escrito em VS2005[C/S].
/*
*Parte teórica:
* Número de identificação de 15 dígitos = código de área de 6 dígitos + aniversário de 6 dígitos + número de série de 3 dígitos
* Número de identificação de 18 dígitos = código de área de 6 dígitos + aniversário de 8 dígitos + número de série de 3 dígitos + código de verificação de 1 dígito
*
*Os primeiros dois dígitos do código do país para cada província, cidade e região são:
* Pequim 11 Jilin 22 Fujian 35 Guangdong 44 Yunnan 53 Tianjin 12 Heilongjiang 23 Jiangxi 36 Guangxi 45 Tibete 54 Hebei 13 Xangai 31 Shandong 37 Hainan 46 Shaanxi 61 Shanxi 14 Jiangsu 32 Henan 41 Chongqing 50
Gansu 62 Mongólia Interior 15 Zhejiang 33 Hubei 42 Sichuan 51 Qinghai 63 Liaoning 21 Anhui 34 Hunan 43 Guizhou 52 Ningxia 64 Xinjiang 65 Taiwan 71 Hong Kong 81 Macau 82 Exterior 91
*O padrão de cartão de identificação de 18 dígitos está claramente estipulado no "Número de Identidade do Cidadão" GB11643-1999, implementado pela Administração Estatal de Qualidade e Supervisão Técnica em 1º de julho de 1999.
*GB11643-1999 "Número de Identidade do Cidadão" é uma versão revisada do "Número de Segurança Social" GB11643-1989, que afirma que o nome padrão original "Número de Segurança Social" será renomeado como "Número de Identidade do Cidadão". "Número de Identidade do Cidadão" Substituirá GB11643-1989 a partir da data de implementação.
*O número de identidade do cidadão é um código de combinação característico, composto por um código corporal de dezessete dígitos e um código de verificação de um dígito. A ordem da esquerda para a direita é: código de endereço de seis dígitos, código de data de nascimento de oito dígitos, código de sequência de três dígitos e código de verificação de um dígito. Seu significado é o seguinte:
*1. Código de endereço: indica o código da divisão administrativa do município (cidade, bandeira, distrito) onde está localizada a residência permanente do objeto codificado e é implementado de acordo com as disposições do GB/T2260.
*2. Código de data de nascimento: indica o ano, mês e dia de nascimento do objeto de codificação. É implementado de acordo com as disposições de GB/T7408. 2 dígitos e 2 dígitos respectivamente, sem separadores entre eles.
*3. Código de sequência: indica o número de sequência atribuído a pessoas nascidas no mesmo ano, mesmo mês e mesmo dia na área identificada pelo mesmo código de endereço. Os números ímpares do código de sequência são atribuídos aos homens, e os números pares são atribuídos aos homens. atribuído às mulheres.
*Método de cálculo de verificação:
*1 Soma ponderada dos primeiros 17 dígitos do código da ontologia.
*A fórmula é: S = Soma(Ai * Wi), i = 0, ... , 16
*onde Ai representa o valor digital do número do cartão de identificação na i-ésima posição, Wi representa o fator de ponderação na i-ésima posição, e os valores correspondentes são:
*7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
*2. Pegue o resultado do cálculo módulo 11.
*Y = mod(S, 11)
*3 A relação correspondente entre os códigos de verificação obtidos com base no valor do módulo é:
*Valor Y: 0 1 2 3 4 5 6 7 8 9 10
*Código de verificação: 1 0 X 9 8 7 6 5 4 3 2
*/
código
1 /// <resumo>
2 /// Verificação do cartão de identificação
3 /// </summary>
4 /// <param name="Id">Número do cartão de identificação</param>
5 /// <retorna></retorna>
6 público bool CheckIDCard (ID da string)
7 {
8 se (Id.Comprimento == 18)
9 {
10 bool verificação = CheckIDCard18(Id);
11 cheque de devolução;
12}
13 senão se (Id.Comprimento == 15)
14 {
15 bool verificação = CheckIDCard15(Id);
16 cheque de devolução;
17}
18 mais
19 {
20 retornam falso;
vinte e um }
vinte e dois }
23 /// <resumo>
24 /// Verificação de cartão de identificação de 18 dígitos
25 /// </summary>
26 /// <param name="Id">Número do cartão de identificação</param>
27 /// <retorna></retorna>
28 privado bool CheckIDCard18 (ID da string)
29 {
30 longos n = 0;
31 if (long.TryParse(Id.Remove(17), out n) == false || n < Math.Pow(10, 16) || long.TryParse(Id.Replace('x', '0') .Replace('X', '0'), fora n) == falso)
32 {
33 return false; //Verificação do número
34}
endereço de 35 strings = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
36 se (endereço.IndexOf(Id.Remove(2)) == -1)
37 {
38 return false; //Verificação de província
39}
40 string nascimento = Id.Substring(6, 8).Insert(6, "-").Insert(4, "-");
41 Hora DateTime = new DateTime();
42 if (DateTime.TryParse(nascimento, hora de saída) == falso)
43 {
44 return false; //Verificação de aniversário
45}
46 string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
47 string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Dividir(',') ;
48 char[] Ai = Id.Remove(17).ToCharArray();
49 soma interna = 0;
50 para (int i = 0; i < 17; i++)
51 {
52 soma += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());
53}
54 int y = -1;
55 Math.DivRem(soma, 11, saída y);
56 if (arrVarifyCode[y] != Id.Substring(17, 1).ToLower())
57 {
58 return false; // Verificação do código de verificação
59}
60 return true; //Em conformidade com o padrão GB11643-1999
61}
62 /// <resumo>
63 /// Verificação de cartão de identificação de 15 dígitos
64 /// </summary>
65 /// <param name="Id">Número do cartão de identificação</param>
66 /// <retorna></retorna>
67 privado bool CheckIDCard15 (ID da string)
68 {
69 longo n = 0;
70 if (long.TryParse(Id, out n) == false || n < Math.Pow(10, 14))
71 {
72 return false; //Verificação do número
73}
Endereço de 74 strings = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
75 se (endereço.IndexOf(Id.Remove(2)) == -1)
76 {
77 return false; //Verificação de província
78}
79 string nascimento = Id.Substring(6, 6).Insert(4, "-").Insert(2, "-");
80 Hora DateTime = new DateTime();
81 if (DateTime.TryParse(nascimento, hora de saída) == falso)
82 {
83 return false; //Verificação de aniversário
84}
85 return true; //Em conformidade com o padrão de cartão de identificação de 15 dígitos