1. 程式人生 > >java實現身份證有效性驗證

java實現身份證有效性驗證

經測試可用

public class ValidateIdentityCard {
	/**
	 * 功能:身份證的有效驗證<br>
	 * <br>
	 * 
	 * 身份證號碼驗證 1、號碼的結構 公民身份號碼是特徵組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次為:六位數字地址碼,
	 * 八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。 2、地址碼(前六位數)
	 * 表示編碼物件常住戶口所在縣(市、旗、區)的行政區劃程式碼,按GB/T2260的規定執行。 3、出生日期碼(第七位至十四位)
	 * 表示編碼物件出生的年、月、日,按GB/T7408的規定執行,年、月、日程式碼之間不用分隔符。 4、順序碼(第十五位至十七位)
	 * 表示在同一地址碼所標識的區域範圍內,對同年、同月、同日出生的人編定的順序號, 順序碼的奇數分配給男性,偶數分配給女性。 5、校驗碼(第十八位數)
	 * (1)十七位數字本體碼加權求和公式 S = Sum(Ai * Wi), i = 0, ... , 16 ,先對前17位數字的權求和
	 * Ai:表示第i位置上的身份證號碼數字值 Wi:表示第i位置上的加權因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4
	 * 2 (2)計算模 Y = mod(S, 11) (3)通過模得到對應的校驗碼 Y: 0 1 2 3 4 5 6 7 8 9 10 校驗碼: 1 0
	 * X 9 8 7 6 5 4 3 2
	 * 
	 * @param IDStr
	 *            身份證號
	 * @return 有效:返回true 無效:false
	 * @throws ParseException
	 */
	public static boolean isCardId(String IDStr) throws ParseException {
		String[] ValCodeArr = { "1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2" };
		String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" };
		String Ai = "";
		// ================ 號碼的長度 15位或18位 ================
		if (IDStr.length() != 15 && IDStr.length() != 18) {
			return false;
		}
		// =======================(end)========================

		// ================ 數字 除最後一位都為數字 ================
		if (IDStr.length() == 18) {
			Ai = IDStr.substring(0, 17);
		} else if (IDStr.length() == 15) {
			Ai = IDStr.substring(0, 6) + "19" + IDStr.substring(6, 15);
		}
		if (StringUtils.isNotBlankNumeric(Ai) == false) {
			return false;
		}
		// =======================(end)========================

		// ================ 出生年月是否有效 ================
		String strYear = Ai.substring(6, 10);// 年份
		String strMonth = Ai.substring(10, 12);// 月份
		String strDay = Ai.substring(12, 14);// 月份
		if (DateUtils.isDate(strYear.concat("-").concat(strMonth).concat("-").concat(strDay)) == false) {
			return false;
		}
		GregorianCalendar gc = new GregorianCalendar();
		SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
		if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150
				|| (gc.getTime().getTime() - s.parse(strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {
			return false;
		}
		if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {
			return false;
		}
		if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {
			return false;
		}
		
		int TotalmulAiWi = 0;
		for (int i = 0; i < 17; i++) {
			TotalmulAiWi = TotalmulAiWi + Integer.parseInt(String.valueOf(Ai.charAt(i))) * Integer.parseInt(Wi[i]);
		}
		int modValue = TotalmulAiWi % 11;
		String strVerifyCode = ValCodeArr[modValue];
		Ai = Ai + strVerifyCode;

		if (IDStr.length() == 18) {
			if (Ai.equals(IDStr) == false) {
				return false;
			}
		} else {
			return true;
		}
	
		return true;
	}

	/**
	 * @param args
	 * @throws ParseException
	 */
	public static void main(String[] args) throws ParseException {
		// String IDCardNum="210102820826411";
		// String IDCardNum="210102198208264114";
		String IDCardNum = "411328199310201312";
		// IDCard id = new IDCard();
		System.out.println(isCardId(IDCardNum));
		// System.out.println(cc.isDate("1996-02-29"));
	}
	
}


相關推薦

java實現身份證有效性驗證

經測試可用 public class ValidateIdentityCard { /** * 功能:身份證的有效驗證<br> * <br> * * 身份證號碼驗證 1、號碼的結構 公民身份號碼是特徵組合碼,由十七位數字本體碼和一

Java實現身份證號碼驗證源碼分享

分隔 toc bst nbsp port birt random exti 一位數 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar;

java 實現登錄驗證碼 (kaptcha 驗證碼組件)

內容 清除 pub auto 二維碼 我們 constant nts extend 驗證碼的作用: 1、防止廣告機註冊和發帖、評論。2、防止暴力破解密碼,特別是有管理員權限的密碼。 在這裏介紹一種非常實用的驗證碼生成工具:kaptcha 這個工具,可以生成各種樣式的驗證碼

【原始碼分享】java實現對接簡訊驗證碼應用功能

今天公司提出一個需求,要在現有專案上收集註冊使用者的真實手機號,由於之前沒有接觸過這一塊,只能尋求度孃的幫助,經過一天的努力,終於完成了,現整理記錄下已備查閱。 1 解決方案:在註冊時要求使用者進行手機驗證。2 尋找簡訊供應商:由於對這一塊不是太懂,大學同學推薦一家他們公司在用的給我。3 程式碼實現 首先到

JAVA實現註冊頁面驗證碼重新整理

撰寫人——軟體二班——陳喜平 需要的工具:tomcat/eclipse/jdk/(注意jdk版本要和tomca相匹配,以及注意區分32位和64位) 步驟:依次建立servlet (伺服器需要)/ jsp(頁面需要) 引入web.xml 如圖所示: doget方法裡面的程式碼: prot

JAVA實現手機簡訊驗證

手機簡訊驗證碼介面來自於網易雲手機簡訊介面 package com.netease.code; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.http.H

Java實現點選驗證

效果 話不多說,先看實現的效果,其中方框為點選區域,真實場景要去掉此方框 核心流程分析 隨機獲取背景圖片 隨機獲取中文字元 在背景圖片中隨機獲取中文字元位置 設定中文旋轉隨機角度、字型顏色 儲存生成文字的座標集合、提示資訊、驗證碼圖片 前端根據提示資訊獲取相

java 實現傳送簡訊驗證碼功能

如何使用java + maven的專案環境傳送簡訊驗證碼,本文使用的是榛子云簡訊 的介面。 1. 安裝sdk 下載地址: http://smsow.zhenzikj.com/doc/sdk.html 下載下來是jar檔案,需要將jar釋出到本地的maven倉庫中, 在c

java實現郵箱註冊驗證

在日常生活中,我們在一個網站中註冊一個賬戶時,往往在提交個人資訊後,網站還要我們通過手機或郵件來驗證,郵件的話大概會是下面這個樣子的: 使用者通過點選連結從而完成註冊,然後才能登入。 也許你會想,為什麼要這麼麻煩直接提交註冊不就行了嗎?這其中很大一部分原因是為

Java實現中文算數驗證碼(算數運算+-*/)

為了防止,頁面向資料庫暴力註冊入力,使用者登入暴力破解,所以加入驗證碼,驗證碼無法被軟體獲取上邊的內容(加入算數計算,更加安全),所以在現在技術,暫時安全。 先看效果圖: 第一次載入比較慢,防止無法載入驗證碼顯示,後臺獲取準備好的預設正在載入圖片(靜態圖片

java實現手機簡訊驗證的基本思路

整體流程: 客戶填入手機號,通過客戶端點選獲取驗證碼按鈕,驗證手機號是否有效,有效則客戶端傳送請求到後臺伺服器,客戶端開始倒計時60s,不通過則返回; 伺服器,驗證手機號是否被註冊或有效,通過則呼叫

Java實現ping命令驗證遠端主機是否線上

為了使用java來實現ping的功能,有人推薦使用java的 Runtime.exec()方法來直接呼叫系統的Ping命令,也有人完成了純Java實現Ping的程式,使用的是Java的NIO包(native io, 高效IO包)。但是裝置檢測只是想測試一個遠端主機是否可用。所以,可以使用以下三種方式

java實現圖片隨機驗證

轉自:https://blog.csdn.net/zhulin40/article/details/51899487<div class="form-group col-lg-6"> <label for="id" class="col-sm-

java 實現傳送簡訊驗證碼(網易雲)

連結:https://pan.baidu.com/s/1saRmzciNQWpFxHJRN0ISTg 密碼:siyt 實現傳送驗證碼的工程下載 1、我們開啟這個工程,檢視其中的程式碼 package com.ghj.test; import java.io.IOExce

Java實現身份證校驗演算法

public class ValidateNumberId { private static String[] validtable = {"1","0","X","9","8","7",

java實現郵件傳送驗證

java實現郵件傳送驗證碼    建議不要用qq郵箱,我使用qq郵箱直接一直給我報530錯誤,我一直認為我程式碼寫的有錯誤或者POP3/SMTP服務沒弄好。所以建議註冊個別的郵箱,我就申請了個網易163郵箱瞬間就好了。所以去申請個別的郵箱吧。   用郵

Java實現超簡單驗證碼識別

閒來想實現程式模擬登陸一個系統,說白了,就是寫個簡單的爬蟲,但是無奈,遇到了數字圖片驗證碼,在查閱了一些方案以後,遂決定自己手寫程式碼實現驗證碼識別,分享一下整個過程。 圖片驗證碼是什麼 圖片驗證碼,這個大家應該都見過。最普遍的圖片驗證碼就是一張

Android實現身份證號碼驗證

話不多說,直接上程式碼,因為與需求不符,略微修改了程式碼public class IDCardValidate { public static final String[] ValCodeArr = { "1", "0", "X", "9", "8", "7", "6

JAVA實現LDAP連線驗證

什麼是LDAP? LDAP(輕量目錄訪問協議),簡單的說,LDAP是一個能得到關於人或者資源的集合、靜態資料的快速方式。 這種說法似乎有點抽象,結合這幾天在做的一個專案具體來談一下。 AD,LDAP,初來乍到的面對這些在課本上不可能碰到的新術語還真是有些懵了,查了大

Java實現身份證演算法校驗

每一個身份證號碼,都不是胡亂隨機生成的,而是按照國家的規定,有規則的生成的,具體規則點選這裡檢視。我們校驗使用者的身份證輸入,僅靠簡單的位數判斷、正則校驗是達不到測試要求的,因此就需要根據國家的規定,把身份證的生成規則轉變為演算法,通過演算法來校驗使用者的輸入是