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("無效");
}
}