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