A. java身份证号位数校验
function checkIdcard(num)
{
num = num.toUpperCase();
//身份证号码为15位或者18位,位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)))
{
//alert('输入的身份证号长度不对,或者号码不符合规定!\n15位号码应全为数字,18位号码末位可以为数字或X。');
return false;
}
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
//下面分别分析出生日期和校验位
var len, re;
len = num.length;
if (len == 15)
{
re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
var arrSplit = num.match(re);
//检查生日日期是否正确
var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
var bGoodDay;
bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
if (!bGoodDay)
{
//alert('输入的身份证号里出生日期不对!');
return false;
}
else
{
//将15位身份证转成18位
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var nTemp = 0, i;
num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
for(i = 0; i < 17; i ++)
{
nTemp += num.substr(i, 1) * arrInt[i];
}
num += arrCh[nTemp % 11];
return true;
}
}
if (len == 18)
{
re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
var arrSplit = num.match(re);
//检查生日日期是否正确
var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
var bGoodDay;
bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
if (!bGoodDay)
{
//alert(dtmBirth.getYear());
//alert(arrSplit[2]);
//alert('输入的身份证号里出生日期不对!');
return false;
}
else
{
//检验18位身份证的校验码是否正确。
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
var valnum;
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var nTemp = 0, i;
for(i = 0; i < 17; i ++)
{
nTemp += num.substr(i, 1) * arrInt[i];
}
valnum = arrCh[nTemp % 11];
if (valnum != num.substr(17, 1))
{
//alert('18位身份证的校验码不正确!应该为:' + valnum);
return false;
}
return true;
}
}
return false;
}
var result = checkIdcard(sfzh);
if (!result)
{
$.messager.alert('提示信息','身份证号码格式不正确');
return;
}
B. java校验身份证号码,解析出生日期,年龄,身份证是否有效
这种我能想到的就是校验身份证字符串的位数,写个正则表达式校验前面的17位为数字,通过了截取第七位到第15位,为出生日期,年龄也差不多,取系统时间年份与出生年减一下
C. java验证身份证号码是不是有效源代码
packagecom.yanlun.starter.utils;
importjava.util.regex.Pattern;
/**
*@author作者:Yan,Email:[email protected]
*@version创建时间:2017年5月26日上午10:42:09
*/
publicclassValidation{
finalPatternREX_DATE_YYYYMM_PATTERN=Pattern.compile("^[0-9]{6}$");
publicstaticfinalPatternREX_DATE_YYYYMMDD_PATTERN=Pattern.compile("^[0-9]{8}$");
//身份证校验加权因子
publicstaticfinalInteger[]ID_NUM_FACTOR=newInteger[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,
1};
//身份证第18位校验码
publicstaticfinalString[]ID_NUM_PARITY_BIT=newString[]{"1","0","X","9","8","7","6","5","4","3",
"2"};
/*
*是否空字符串
*
*@paramc文本或其它基本数字类型对象
*/
publicstaticbooleanisEmpty(Objectc){
returnc==null||c.toString().trim().equals("");
}
/**
*判断是否为“”式的时期
*
*@paramdateStr
*@return
*/
privatestaticbooleanisDate6(StringdateStr){
if(isEmpty(dateStr)||!REX_DATE_YYYYMM_PATTERN.matcher(dateStr).matches()){
returnfalse;
}
returnisValidDateRange(date6Split(dateStr));
}
/**
*判断是否为“YYYYMMDD”式的时期
*
*@paramdateStr
*@return
*/
privatestaticbooleanisDate8(StringdateStr){
if(isEmpty(dateStr)||!REX_DATE_YYYYMMDD_PATTERN.matcher(dateStr).matches()){
returnfalse;
}
returnisValidDateRange(date8Split(dateStr));
}
(Integeryear){
return((year%4==0)&&(year%100!=0))||(year%400==0);
}
(Integeryear){
returnyear<1700||year>2500;
}
(Integermonth){
returnmonth<1||month>12;
}
(Integerday,Integermonth,Integeryear){
Integer[]iaMonthDays=newInteger[]{31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year))
iaMonthDays[1]=29;
returnday<1||day>iaMonthDays[month-1];
}
/**
*splitdate0-YY,1-MM,2-DD
*
*@paramdateStr
*@return
*/
privatestaticInteger[]date6Split(StringdateStr){
finalIntegerYEAR_BASE=1900;
Integeryear=null,month=null,day=null;
year=YEAR_BASE+Integer.valueOf(dateStr.substring(0,2));
month=Integer.valueOf(dateStr.substring(2,4));
day=Integer.valueOf(dateStr.substring(4,6));
returnnewInteger[]{year,month,day};
}
/**
*splitdate0-YYYY,1-MM,2-DD
*
*@paramdateStr
*@return
*/
privatestaticInteger[]date8Split(StringdateStr){
Integeryear=null,month=null,day=null;
year=Integer.valueOf(dateStr.substring(0,4));
month=Integer.valueOf(dateStr.substring(4,6));
if(dateStr.length()==8){
day=Integer.valueOf(dateStr.substring(6,8));
returnnewInteger[]{year,month,day};
}else{
returnnewInteger[]{year,month};
}
}
(Integer[]dateSplitResult){
Integeryear=dateSplitResult[0],month=dateSplitResult[1],day=dateSplitResult[2];
if(isInvalidYear(year))
returnfalse;
if(isInvalidMonth(month))
returnfalse;
if(isInvalidDay(day,month,year))
returnfalse;
returntrue;
}
/**
*18位/15位身份证号码校验
*
*@paramidNumber
*@return
*/
(StringidNumber){
if(isEmpty(idNumber)||(idNumber.length()!=18&&idNumber.length()!=15)){
returnfalse;
}
//initialize
if(idNumber.length()==18){
//checkdate
Stringdate8=idNumber.substring(6,14);
if(isDate8(date8)==false){
returnfalse;
}
inttotalMulAiWi=0;
charcharAt;
//checkandsetvalue,calculatethetotalmulAiWi
for(inti=0;i<17;i++){
charAt=idNumber.charAt(i);
if(charAt<'0'||charAt>'9'){
returnfalse;
}
totalMulAiWi+=Integer.valueOf(String.valueOf(charAt))*ID_NUM_FACTOR[i];
}
//calculatethecheckdigit
StringcheckDigit=ID_NUM_PARITY_BIT[totalMulAiWi%11];
//checklastdigit
if(!checkDigit.equalsIgnoreCase(String.valueOf(idNumber.charAt(17)))){
returnfalse;
}
}else{//lengthis15
//checkdate
Stringdate6=idNumber.substring(6,12);
if(isDate6(date6)==false){
returnfalse;
}
}
returntrue;
}
}
D. java验证身份证号码是否真实有效
只能验证身份证是否符合标准,没法验证真实有效,除非去对接公安系统的身份证管理
E. 使用java判断输入身份证号位数是否正确判断输入是否有效
public static void getString(){
String a,b;
while (true) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的18位身份证号码!!");
a = (String) input.next();
if (a.length() == 18) {
a.matches("/D");
b = a.substring(6, 14);
System.out.println("请的出生日期为:" + b);
if(a.charAt(16)%2 == 0)
{
System.out.println("您的性回别是女性!");
}else{
System.out.println("您的性别是男性!");
}
} else {
System.out.println("您输答入的身份证错误!!");
}
}
}
F. 使用java判断输入身份证号位数是否正确,判断输入是否有效
public static void getString(){
String a,b;
while (true) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的来18位身份源证号码!!");
a = (String) input.next();
if (a.length() == 18) {
a.matches("/D");
b = a.substring(6, 14);
System.out.println("请的出生日期为:" + b);
if(a.charAt(16)%2 == 0)
{
System.out.println("您的性别是女性!");
}else{
System.out.println("您的性别是男性!");
}
} else {
System.out.println("您输入的身份证错误!!");
}
}
}
G. 使用java判断输入身份证号位数是否正确,判断输入是否有效
public static void getString(){
String a,b;
while (true) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您抄的18位身份证号码!!");
a = (String) input.next();
if (a.length() == 18) {
a.matches("/D");
b = a.substring(6, 14);
System.out.println("请的出生日期为:" + b);
if(a.charAt(16)%2 == 0)
{
System.out.println("您的性别是女性!");
}else{
System.out.println("您的性别是男性!");
}
} else {
System.out.println("您输入的身份证错误!!");
}
}
}
H. 在Java中怎么判断有效时间!!!
我记得在看ORACLE的数据库培训教程里有SQL语句可以把一定格式字符串直接转成时间的。你在网上搜下相关资料:
I. java中要求实现将身份证中的日期变成*,然后输出
/**
* 设置一个静态的公共方法方便以后调用
* @param id
* @return
*/
public static String idFormat(String id){
// 可以用 StringBuilder 这个类,里面有一个接口回replace,如下
StringBuilder sb = new StringBuilder(id);
sb.replace(6, 10, "****");
return sb.toString();
}
public static void main(String[] args) {
System.out.println(Test.idFormat("10013319961213602X"));
}
以上代答码就能实现,纯手打,望采纳。(main方法的Test是我这个测试类,你到时候把上面代码复制到你的Program2类里面,到时候项目调用直接String str =Program2.idFormat(身份证号) 这个str就是处理好的身份证号)
J. java用正则表达式判断一个18位身份证号是否有效
^很显然 是你得正则表达式不对啊,正确的18位身份证验证正则为:
Stringregex="^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$";
而且就算正则表达式正确了,你的逻辑判断代码也是有问题,
publicclassHomework{
publicstaticvoidmain(String[]args){
Stringregex="^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$";
System.out.println("请输入18位的身份证号码:");
Scannerscanner=newScanner(System.in);
Strings=scanner.nextLine();
if(s.matches(regex)){
inty1,y2;
Stringyear1=s.substring(6,8);
y1=Integer.parseInt(year1);
Stringyear2=s.substring(8,10);
y2=Integer.parseInt(year2);
if((y1==18&&y2>=87&&y2<=89)
||(y1==19&&y2>=0&&y2<=99)
||(y1==20&&y2<=17)){
intm,d;
Stringmonth=s.substring(10,12);
m=Integer.parseInt(month);
Stringday=s.substring(12,14);
d=Integer.parseInt(day);
if((m==1||m==3||m==5||m==7||m==8||m==10||m==12)
&&(d==31))
System.out.println("有效");
elseif((m==4||m==6||m==9||m==11)&&(d==30))
System.out.println("有效");
elseif(m==2){
inty;
Stringyear=s.substring(6,10);
y=Integer.parseInt(year);
if(((y%4==0&&y%100!=0)||y%400==0)
&&(d==29))
System.out.println("有效");
elseif(((y%4!=0&&y%100==0)||y%400!=0)
&&(d==28))
System.out.println("有效");
else
System.out.println("无效");
return;
}else{
System.out.println("无效");
return;
}
intss;
Stringsex=s.substring(16,17);
ss=Integer.parseInt(sex);
if(ss%2==0)
System.out.println("女性");
else
System.out.println("男性");
}else
System.out.println("无效");
}else
System.out.println("无效");
}
}