用JAVA编写一个对18位身份证的输入验证程序.要求输入的18位数字或最后一位为x时,通过验证,否则不通过.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用JAVA编写一个对18位身份证的输入验证程序.要求输入的18位数字或最后一位为x时,通过验证,否则不通过.相关的知识,希望对你有一定的参考价值。

private static final String onlyNum = "^[0-9]*1“;

/**
* 验证身份证号码
* @param id_number
* @return
*/
public static Boolean checkNID(String id_number)
Boolean isRight = false;
if(id_number.length() != 15 && id_number.length() != 18)
return false;

String string = id_number.substring(0, id_number.length() - 1);
if(!string.matches(onlyNum))
return false;

if(id_number.length() == 15)
return is15IDNumberRight(id_number);
else if(id_number.length() == 18)
return is18IDNumberRight(id_number);

return isRight;
参考技术A 正则表达式:
判定代码如下:

if ((!Regex.IsMatch(txtID.Text, @"^(^\d15$|^\d18$|^\d17(\d|X|x))$",RegexOptions.IgnoreCase)))

MessageBox.Show("请输入正确的身份证号码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
参考技术B 正则表达式就可以了

算法训练:身份证号码升级

问题描述
  从1999年10月1日开始,公民身份证号码由15位数字增至18位。(18位身份证号码简介)。升级方法为:
  1、把15位身份证号码中的年份由2位(7,8位)改为四位。
  2、最后添加一位验证码。验证码的计算方案:
  将前 17 位分别乘以对应系数 (7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2) 并相加,然后除以 11 取余数,0-10 分别对应 1 0 x 9 8 7 6 5 4 3 2。
  请编写一个程序,用户输入15位身份证号码,程序生成18位身份证号码。假设所有要升级的身份证的四位年份都是19××年
输入格式
  一个15位的数字串,作为身份证号码
输出格式
  一个18位的字符串,作为升级后的身份证号码
样例输入
110105491231002
样例输出
11010519491231002x
数据规模和约定
  不用判断输入的15位字符串是否合理
傻傻憨憨之做法:没想到可以直接建立数组然后查表,直接挨着枚举,。。。
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 int main(void)
 5 {
 6     char dentity[15] = {0};
 7     char Dealdentity[18] = { 0 };
 8     int i,j;
 9 
10     for (i = 0; i < 15; i++)
11     {
12         scanf("%c", &dentity[i]);
13     }
14     
15     for (i = 0; i < 6; i++)
16     {
17         Dealdentity[i] = dentity[i];
18     }
19     int temp = i;
20     Dealdentity[i++] = 1;
21     Dealdentity[i++] = 9;
22 
23     for (j = temp; j < 15; j++) //j = 8
24     {
25         Dealdentity[i++] = dentity[j];
26     }
27 
28     int sum = 0;
29     sum = (Dealdentity[0]-48) * 7 + (Dealdentity[1]-48) * 9 + (Dealdentity[2]-48) * 10 + (Dealdentity[3]-48) * 5 + (Dealdentity[4]-48) * 8 + (Dealdentity[5]-48) * 4
30         + (Dealdentity[6]-48) * 2 + (Dealdentity[7]-48) * 1 + (Dealdentity[8]-48) * 6 + (Dealdentity[9]-48) * 3 + (Dealdentity[10]-48) * 7 + (Dealdentity[11]-48) * 9
31         + (Dealdentity[12]-48) * 10 + (Dealdentity[13]-48) * 5 + (Dealdentity[14]-48) * 8 + (Dealdentity[15]-48) * 4 + (Dealdentity[16]-48) * 2;
32     int Dsum = sum % 11;
33     //printf("%d %d", sum,Dsum);
34     switch (Dsum)
35     {
36     case 0:Dealdentity[i++] = 1; 
37         break;
38     case 1:Dealdentity[i++] = 0;
39         break;
40     case 2:Dealdentity[i++] = x;
41         break;
42     case 3:Dealdentity[i++] = 9;
43         break;
44     case 4:Dealdentity[i++] = 8;
45         break;
46     case 5:Dealdentity[i++] = 7;
47         break;
48     case 6:Dealdentity[i++] = 6;
49         break;
50     case 7:Dealdentity[i++] = 5;
51         break;
52     case 8:Dealdentity[i++] = 4;
53         break;
54     case 9:Dealdentity[i++] = 3;
55         break;
56     case 10:Dealdentity[i++] = 2;
57         break;
58     }
59     for (i = 0; i < 18; i++)
60     {
61         printf("%c", Dealdentity[i]);
62     }
63     
64     return 0;
65 }

直接建立数组查表:

 1 #include<stdio.h>  
 2 int xishu[17] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };
 3 char jieguo[11] = { 1,0,x,9,8,7,6,5,4,3,2 };
 4 int main()
 5 {
 6     char a[18];
 7     int b[18];
 8     int i, sum = 0;
 9     gets(a);          
10     for (i = 14; i >= 6; i--)
11         a[i + 2] = a[i];
12     a[6] = 1;
13     a[7] = 9;
14     for (i = 0; i < 17; i++)
15     {
16         b[i] = a[i] - 0;
17         sum += b[i] * xishu[i];
18     }
19     sum %= 11;
20     a[17] = jieguo[sum];
21     for (i = 0; i < 18; i++)
22         printf("%c", a[i]);
23     printf("
");
24     return 0;
25 }

太傻了。。。

 

 

 

以上是关于用JAVA编写一个对18位身份证的输入验证程序.要求输入的18位数字或最后一位为x时,通过验证,否则不通过.的主要内容,如果未能解决你的问题,请参考以下文章

用Java 写程序完成输入的身份证号码合法性判断

用c语言编程求 18位 身份证的验证码

求解用java语言 编写一个身份证的类,可以用来验证身份证的长度,并可以显示地址码,生日,性别。

身份证号码升级

算法提高 身份证号码升级

算法训练:身份证号码升级