java中如何从键盘输入一个18位的身份证号码保存到字符数组Card中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中如何从键盘输入一个18位的身份证号码保存到字符数组Card中?相关的知识,希望对你有一定的参考价值。

System.out.println("请输入您的身份证:");
Scanner scanner = new Scanner(System.in);
String[] cards = new String[];
cards[0] = scanner.nextLine();
循环输入并存入数组自己实现,很容易追问

String[] cards = new String[]; 你这步没带长度。
求最佳答案,完整的。个位高手们。。。

追答

你是要把多个身份证保存到字符数组中还是只把一个身份证的18位每一位保存到数组中?
看你的意思貌似是后者?如下:
System.out.println("请输入您的身份证:");
Scanner scanner = new Scanner(System.in);
String card = new String;
card = scanner.nextLine();
char[] cardNumber = card.toCharArray();

参考技术A 接收赋值不就ok了?

身份证校验(JAVA版)

我也是最近做项目的时候,才知道身份证的尾数是个校验位。说白了,并不是你随随便便输入一个身份证号码都是正确的号码。不单开头两位的省份编码要正确,中间出生年月日是合理数值,还有身份证最后一位是前面17位的一个校验码。

其实逻辑很简单,基本一看就懂了,废话不说,直接上源码:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

public class SimpleTest 

	static Map<String, Object> province;

	static 
		province = new HashMap<String, Object>();
		province.put("11", "北京");
		province.put("12", "天津");
		province.put("13", "河北");
		province.put("14", "山西");
		province.put("15", "内蒙古");
		province.put("21", "辽宁");
		province.put("22", "吉林");
		province.put("23", "黑龙江");
		province.put("31", "上海");
		province.put("32", "江苏");
		province.put("33", "浙江");
		province.put("34", "安徽");
		province.put("35", "福建");
		province.put("36", "江西");
		province.put("37", "山东");
		province.put("41", "河南");
		province.put("42", "湖北");
		province.put("43", "湖 南");
		province.put("44", "广东");
		province.put("45", "广西");
		province.put("46", "海南");
		province.put("50", "重庆");
		province.put("51", "四川");
		province.put("52", "贵州");
		province.put("53", "云南");
		province.put("54", "西藏");
		province.put("61", "陕西");
		province.put("62", "甘肃");
		province.put("63", "青海");
		province.put("64", "宁夏");
		province.put("65", "新疆");
		province.put("71", "台湾");
		province.put("81", "香港");
		province.put("82", "澳门");
		province.put("91", "国外");
	

	public static void main(String[] args) 
		//你的身份证号码
		String content = "...";

		String pattern = "^\\\\d17(\\\\d|x|X)";
		if (!Pattern.matches(pattern, content)) 
			System.out.println("你输入的身份证长度或格式错误");
		

		String provinceNum = content.substring(0, 2);
		if (!province.containsKey(provinceNum)) 
			System.out.println("你的身份证地区非法");
		

		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		Calendar ca = Calendar.getInstance();
		String year = content.substring(6, 10);
		String month = content.substring(10, 12);
		String date = content.substring(12, 14);
		ca.set(Integer.parseInt(year), Integer.parseInt(month)-1, Integer.parseInt(date));
		if (!sdf.format(ca.getTime()).equals(year + month + date)) 
			System.out.println("身份证上的出生日期非法");
		
		int iSum=0;
		for (int i = 17; i >= 0; i--) 
			String ch = content.substring(17 - i, 18-i);
			if(ch.equals("X") || ch.equals("X")) 
				ch = "10";
			
			iSum += (Math.pow(2, i) % 11) * Integer.parseInt(ch, 11);
		
		if (iSum % 11 != 1) 
			System.out.println("你输入的身份证号非法");
		
	

以上是关于java中如何从键盘输入一个18位的身份证号码保存到字符数组Card中?的主要内容,如果未能解决你的问题,请参考以下文章

表格中如何根据身份证号提取前6位的行政代码数字

c语言:要求从键盘上输入其一身份证号码,判断第18位是不是正确

用Java从任意给定的身份证号码中提取此人的出生日期

使用java判断输入身份证号位数是不是正确,判断输入是不是有效

请问在C#的Winform下如何用正则表达式限制用户只能在textBox中输入18位的身份证号码。

JAVA从控制台输入身份证号码,把生日用星号代替再打印出来