通过身份证号查出所在籍贯以及性别。

不想打字了看代码吧。一个朋友发的,但是比较有用吧,文件中录入的身份证地址的可能有些出入,极少数。

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.Scanner;
import java.util.Set;

public class IDCardFactory {
	
	public static void main(String[] args) {
		
		Properties prop = new Properties();
		InputStream in = IDCardFactory.class.getResourceAsStream("city.properties");
		try {
			prop.load(in);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	
		validateIdcard(prop);
	}

	private static void validateIdcard(Properties prop) {
		// TODO Auto-generated method stub
		String idcard = new Scanner(System.in).nextLine().trim();
		char[] chs = idcard.toCharArray();
		int[] ins = new int[18];
		for (int i = 0; i < chs.length - 1; i++) {
			ins[i]= Integer.parseInt(String.valueOf(chs[i]));
		}
		int[] invali = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
		int sum=0;
		for (int i = 0; i < ins.length-1; i++) {
			sum += ins[i] * invali[i];
		}
		int endint = sum % 11;
		
		String[] model ={"1","0","X","9","8","7","6","5","4","3","2"};
		String endstr = model[endint];
		String inendstr = String.valueOf(chs[chs.length-1]);
		if(!endstr.equals(inendstr)){
			System.out.println("身份证号码输入非法!");
			return;
		}
		
		String sex="男";
		if(ins[ins.length-2] % 2 == 0){
			sex = "女";
		}
		
		System.out.println("身份证号码:"+idcard+",籍贯:"+prop.getProperty(idcard.substring(0, 6))+",性别:"+sex);
	}

	private static void creatIdCard(Properties prop) {
		Set<Object> keys= prop.keySet();
		
		 double ran = Math.random();
		 long index = Math.round(ran * 3146); 
		 long starttime = -639129600000L;
		 long dtcl = Math.round( ran * 1564617600000L);
		 SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
		 String birthday = format.format(new Date(starttime + dtcl));
		 String [] strs = {"0","1","2","3","4","5","6","7","8","9"};
		 String sign="";
		 for (int i = 0; i < 3; i++) {
			 sign += strs[(int)Math.round(Math.random() * 8)];
		}

		 Object[] keyArr = keys.toArray();
		 String key = keyArr[(int)index].toString();
		 String value = prop.getProperty(key);
		 createIDNum(key,value,birthday,sign);
	}

	private static void createIDNum(String key,String value,String birthday,String sign) {
		char[] chs = (key+birthday+sign).toCharArray();
		int[] ins = new int[17];
		for (int i = 0; i < chs.length; i++) {
			ins[i]= Integer.parseInt(String.valueOf(chs[i]));
		}
		int[] invali = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
		int sum=0;
		for (int i = 0; i < ins.length; i++) {
			sum += ins[i] * invali[i];
		}
		int endint = sum % 11;
		
		String[] model ={"1","0","X","9","8","7","6","5","4","3","2"};
		String endstr = model[endint];
		String idcardnum = key+birthday+sign+endstr;
		String sex="男";
		if(Integer.parseInt(sign) % 2 == 0){
			sex = "女";
		}
		System.out.println("身份证号码:"+idcardnum+",籍贯:"+value+",性别:"+sex);
	}

}

这个是从键盘录入进行判断的。
.properties文件…在网盘里拿吧。
获取properties文件内容,不知道请自行百度。

提取码: aby1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爪哇Bubble

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值