/**

創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、蕭山網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為蕭山等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
* 定義一個(gè)方法,輸入一個(gè)身份證號(hào)碼(18)位,最終返回一個(gè)字符串,格式如下:“尊敬的男士(女士),您是****年**月**日出生的。”
* 要求:如果輸入的身份證不是18位,或者格式不正確(包含非數(shù)字字符,除了最后一位的X除外)則返回一個(gè)字符串“您輸入的身份證號(hào)碼有誤”
* */
import java.util.Scanner;
public class JudgeID {
public static void main(String[] args){
Scanner reader = new Scanner(System.in);
System.out.println("請(qǐng)輸入您的id號(hào)碼");
String id = reader.next();
System.out.println(judgeID(id));
}
public static String judgeID(String IDNumber){
int len = IDNumber.length();
String wrongMsg = "您輸入的身份證號(hào)有誤";
String correctMsg = null;
char lastChar = IDNumber.charAt(len-1);
String year = null;
String month = null;
String day = null;
if(len != 18){
return wrongMsg;
}
for(int i = 0; i len-1; i++){
if(IDNumber.charAt(i) '0' || IDNumber.charAt(i) '9' ){
return wrongMsg;
}
}
if(lastChar != 'X' lastChar '0' lastChar '9'){
return wrongMsg;
}
//如果身份證格式是沒有問題的,那個(gè)打印年月日信息
year = IDNumber.substring(6,10);
month = IDNumber.substring(10,12);
day = IDNumber.substring(12,14);
correctMsg = "您是"+year+"年"+month+"月"+day+"日出生!";
return correctMsg;
}
}
package?com.yanlun.starter.utils;
import?java.util.regex.Pattern;
/**
*?@author?作者:Yan,Email:yanlun0323@163.com
*?@version?創(chuàng)建時(shí)間:2017年5月26日?上午10:42:09
*/
public?class?Validation?{
public?static?final?Pattern?REX_DATE_YYYYMM_PATTERN?=?Pattern.compile("^[0-9]{6}$");
public?static?final?Pattern?REX_DATE_YYYYMMDD_PATTERN?=?Pattern.compile("^[0-9]{8}$");
//?身份證校驗(yàn)加權(quán)因子
public?static?final?Integer[]?ID_NUM_FACTOR?=?new?Integer[]?{?7,?9,?10,?5,?8,?4,?2,?1,?6,?3,?7,?9,?10,?5,?8,?4,?2,
1?};
//?身份證第18位校驗(yàn)碼
public?static?final?String[]?ID_NUM_PARITY_BIT?=?new?String[]?{?"1",?"0",?"X",?"9",?"8",?"7",?"6",?"5",?"4",?"3",
"2"?};
/*
?*?是否空字符串
?*?
?*?@param?c?文本或其它基本數(shù)字類型對(duì)象
?*/
public?static?boolean?isEmpty(Object?c)?{
return?c?==?null?||?c.toString().trim().equals("");
}
/**
?*?判斷是否為“”式的時(shí)期
?*?
?*?@param?dateStr
?*?@return
?*/
private?static?boolean?isDate6(String?dateStr)?{
if?(isEmpty(dateStr)?||?!REX_DATE_YYYYMM_PATTERN.matcher(dateStr).matches())?{
return?false;
}
return?isValidDateRange(date6Split(dateStr));
}
/**
?*?判斷是否為“YYYYMMDD”式的時(shí)期
?*?
?*?@param?dateStr
?*?@return
?*/
private?static?boolean?isDate8(String?dateStr)?{
if?(isEmpty(dateStr)?||?!REX_DATE_YYYYMMDD_PATTERN.matcher(dateStr).matches())?{
return?false;
}
return?isValidDateRange(date8Split(dateStr));
}
private?static?boolean?isLeapYear(Integer?year)?{
return?((year?%?4?==?0)??(year?%?100?!=?0))?||?(year?%?400?==?0);
}
private?static?boolean?isInvalidYear(Integer?year)?{
return?year??1700?||?year??2500;
}
private?static?boolean?isInvalidMonth(Integer?month)?{
return?month??1?||?month??12;
}
private?static?boolean?isInvalidDay(Integer?day,?Integer?month,?Integer?year)?{
Integer[]?iaMonthDays?=?new?Integer[]?{?31,?28,?31,?30,?31,?30,?31,?31,?30,?31,?30,?31?};
if?(isLeapYear(year))
iaMonthDays[1]?=?29;
return?day??1?||?day??iaMonthDays[month?-?1];
}
/**
?*?split?date?0-YY,1-MM,2-DD
?*?
?*?@param?dateStr
?*?@return
?*/
private?static?Integer[]?date6Split(String?dateStr)?{
final?Integer?YEAR_BASE?=?1900;
Integer?year?=?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));
return?new?Integer[]?{?year,?month,?day?};
}
/**
?*?split?date?0-YYYY,1-MM,2-DD
?*?
?*?@param?dateStr
?*?@return
?*/
private?static?Integer[]?date8Split(String?dateStr)?{
Integer?year?=?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));
return?new?Integer[]?{?year,?month,?day?};
}?else?{
return?new?Integer[]?{?year,?month?};
}
}
private?static?boolean?isValidDateRange(Integer[]?dateSplitResult)?{
Integer?year?=?dateSplitResult[0],?month?=?dateSplitResult[1],?day?=?dateSplitResult[2];
if?(isInvalidYear(year))
return?false;
if?(isInvalidMonth(month))
return?false;
if?(isInvalidDay(day,?month,?year))
return?false;
return?true;
}
/**
?*?18位/15位身份證號(hào)碼校驗(yàn)
?*?
?*?@param?idNumber
?*?@return
?*/
public?static?boolean?isIdentityCardNum(String?idNumber)?{
if?(isEmpty(idNumber)?||?(idNumber.length()?!=?18??idNumber.length()?!=?15))?{
return?false;
}
//?initialize
if?(idNumber.length()?==?18)?{
//?check?date
String?date8?=?idNumber.substring(6,?14);
if?(isDate8(date8)?==?false)?{
return?false;
}
int?totalMulAiWi?=?0;
char?charAt;
//?check?and?set?value,?calculate?the?totalmulAiWi
for?(int?i?=?0;?i??17;?i++)?{
charAt?=?idNumber.charAt(i);
if?(charAt??'0'?||?charAt??'9')?{
return?false;
}
totalMulAiWi?+=?Integer.valueOf(String.valueOf(charAt))?*?ID_NUM_FACTOR[i];
}
//?calculate?the?check?digit
String?checkDigit?=?ID_NUM_PARITY_BIT[totalMulAiWi?%?11];
//?check?last?digit
if?(!checkDigit.equalsIgnoreCase(String.valueOf(idNumber.charAt(17))))?{
return?false;
}
}?else?{//?length?is?15
//?check?date
String?date6?=?idNumber.substring(6,?12);
if?(isDate6(date6)?==?false)?{
return?false;
}
}
return?true;
}
}
使用java語言實(shí)現(xiàn)一個(gè)身份證號(hào)碼轉(zhuǎn)換的程序:把15位號(hào)碼轉(zhuǎn)換為18位的號(hào)碼功能要求:1.判斷輸入身份證號(hào)位數(shù)是否正確,判斷輸入是否有效(如輸入非數(shù)字字符),否則提示用戶重新輸入。
2.計(jì)算身份證號(hào)碼。
3.根據(jù)身份證號(hào)的第7-14位(YYYYMMDD)顯示出生日期。4.根據(jù)身份證號(hào)的第17位(奇數(shù)為男性,偶數(shù)為女性),顯示性別。
如果只要判斷有非法的字符(除0-9和Xx外)可用正則表達(dá)式publicstaticvoidmain(String[]args){//TODOcodeapplicationlogichereStrings="2142213weqrwe32";StringregEx="[^0-9Xx]";Patternpat=Pattern.compile(regEx);Matchermat=pat.matcher(s);booleanrs=mat.find();if(rs){System.out.print("有非法字符");}另外,校驗(yàn)身份證號(hào)碼有專門程序的,可直接校驗(yàn)身份證號(hào)是否正確,在自己在網(wǎng)上找下
public static void getString(){\x0d\x0a String a,b;\x0d\x0a while (true) {\x0d\x0a Scanner input = new Scanner(System.in);\x0d\x0a System.out.println("請(qǐng)輸入您的18位身份證號(hào)碼!!");\x0d\x0a a = (String) input.next();\x0d\x0a if (a.length() == 18) {\x0d\x0a a.matches("/D");\x0d\x0a b = a.substring(6, 14);\x0d\x0a System.out.println("請(qǐng)的出生日期為:" + b);\x0d\x0a if(a.charAt(16)%2 == 0)\x0d\x0a {\x0d\x0a System.out.println("您的性別是女性!");\x0d\x0a }else{\x0d\x0a System.out.println("您的性別是男性!");\x0d\x0a }\x0d\x0a } else {\x0d\x0a System.out.println("您輸入的身份證錯(cuò)誤!!");\x0d\x0a }\x0d\x0a }\x0d\x0a }
我國自1999年實(shí)施公民身份號(hào)碼制度以來,許多公民身份號(hào)碼末位為“X”的公民,由于不明白“X”的含義,要求給予更換,產(chǎn)生了不必要的誤會(huì)。目前我國公民身份證號(hào)碼由18位數(shù)字組成:前6位為地址碼,第7至14位為出生日期碼,第15至17位為順序碼,第18位為校驗(yàn)碼。檢驗(yàn)碼分別是“0、1、2、……10”共11個(gè)數(shù)字,當(dāng)檢驗(yàn)碼為“10”時(shí),為了保證公民身份證號(hào)碼18位,所以用“X”表示。雖然校驗(yàn)碼為“X”不能更換,但若需全用數(shù)字表示,只需將18位公民身份號(hào)碼轉(zhuǎn)換成15位居民身份證號(hào)碼,去掉第7至8位和最后1位3個(gè)數(shù)碼。
當(dāng)今的身份證號(hào)碼有15位和18位之分。1985年我國實(shí)行居民身份證制度,當(dāng)時(shí)簽發(fā)的身份證號(hào)碼是15位的,1999年簽發(fā)的身份證由于年份的擴(kuò)展(由兩位變?yōu)樗奈唬┖湍┪布恿诵?yàn)碼,就成了18位。這兩種身份證號(hào)碼將在相當(dāng)長的一段時(shí)期內(nèi)共存。兩種身份證號(hào)碼的含義如下:
18位的身份證號(hào)碼 如:130429####%%%%0078
1~6位為地區(qū)代碼,其中1、2位數(shù)為各省級(jí)政府的代碼,3、4位數(shù)為地、市級(jí)政府的代碼,5、6位數(shù)為縣、區(qū)級(jí)政府代碼。如13(河北省)04(邯鄲市)29(永年縣)
7~14位為出生年月日
15~17位為順序號(hào),是縣、區(qū)級(jí)政府所轄派出所的分配碼,每個(gè)派出所分配碼為10個(gè)連續(xù)號(hào)碼,例如“000-009”或“060-069”,其中單數(shù)為男性分配碼,雙數(shù)為女性分配碼,如遇同年同月同日有兩人以上時(shí)順延第二、第三、第四、第五個(gè)分配碼。如:007的就是個(gè)男生 而且和他同年月日生的男生至少有兩個(gè) 他們的后四位是001* 和 003*
18位為效驗(yàn)位(識(shí)別碼),通過復(fù)雜公式算出,普遍采用計(jì)算機(jī)自動(dòng)生成。是前面17位的一種檢驗(yàn)代碼,如果你改變了前面某個(gè)數(shù)字而后面的效驗(yàn)代碼不響應(yīng)改變就會(huì)被計(jì)算軟件判斷為非法身份正號(hào)碼。X也是效驗(yàn)代碼的一中
15位的身份證號(hào)碼:
(1)1~6位為地區(qū)代碼
(2)7~8位為出生年份(2位),9~10位為出生月份,11~12位為出生日期
(3)第13~15位為順序號(hào),并能夠判斷性別,奇數(shù)為男,偶數(shù)為女。
分享題目:java代碼驗(yàn)證身份證號(hào) java判斷身份證號(hào)碼是否正確
本文來源:http://chinadenli.net/article42/hghohc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、營銷型網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、域名注冊(cè)、搜索引擎優(yōu)化、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)