1. 程式人生 > >JS嚴格校驗身份證號

JS嚴格校驗身份證號

以下是根據身份證號碼編碼規則,使用JS對其進行有效性驗證程式碼

<script type="text/javascript">
	var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];    // 加權因子   
	var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];            // 身份證驗證位值.10代表X   
	function IdCardValidate(idCard) { 
	    idCard = trim(idCard.replace(/ /g, ""));               //去掉字串頭尾空格                     
	    if (idCard.length == 15) {   
	        return isValidityBrithBy15IdCard(idCard);       //進行15位身份證的驗證    
	    } else if (idCard.length == 18) {   
	        var a_idCard = idCard.split("");                // 得到身份證陣列   
	        if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){   //進行18位身份證的基本驗證和第18位的驗證
	            return true;   
	        }else {   
	            return false;   
	        }   
	    } else {   
	        return false;   
	    }   
	}   
	/**  
	 * 判斷身份證號碼為18位時最後的驗證位是否正確  
	 * @param a_idCard 身份證號碼陣列  
	 * @return  
	 */  
	function isTrueValidateCodeBy18IdCard(a_idCard) {   
	    var sum = 0;                             // 宣告加權求和變數   
	    if (a_idCard[17].toLowerCase() == 'x') {   
	        a_idCard[17] = 10;                    // 將最後位為x的驗證碼替換為10方便後續操作   
	    }   
	    for ( var i = 0; i < 17; i++) {   
	        sum += Wi[i] * a_idCard[i];            // 加權求和   
	    }   
	    valCodePosition = sum % 11;                // 得到驗證碼所位置   
	    if (a_idCard[17] == ValideCode[valCodePosition]) {   
	        return true;   
	    } else {   
	        return false;   
	    }   
	}   
	/**  
	  * 驗證18位數身份證號碼中的生日是否是有效生日  
	  * @param idCard 18位書身份證字串  
	  * @return  
	  */  
	function isValidityBrithBy18IdCard(idCard18){   
	    var year =  idCard18.substring(6,10);   
	    var month = idCard18.substring(10,12);   
	    var day = idCard18.substring(12,14);   
	    var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));   
	    // 這裡用getFullYear()獲取年份,避免千年蟲問題   
	    if(temp_date.getFullYear()!=parseFloat(year)   
	          ||temp_date.getMonth()!=parseFloat(month)-1   
	          ||temp_date.getDate()!=parseFloat(day)){   
	            return false;   
	    }else{   
	        return true;   
	    }   
	}   
	  /**  
	   * 驗證15位數身份證號碼中的生日是否是有效生日  
	   * @param idCard15 15位書身份證字串  
	   * @return  
	   */  
	  function isValidityBrithBy15IdCard(idCard15){   
	      var year =  idCard15.substring(6,8);   
	      var month = idCard15.substring(8,10);   
	      var day = idCard15.substring(10,12);   
	      var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));   
	      // 對於老身份證中的你年齡則不需考慮千年蟲問題而使用getYear()方法   
	      if(temp_date.getYear()!=parseFloat(year)   
	              ||temp_date.getMonth()!=parseFloat(month)-1   
	              ||temp_date.getDate()!=parseFloat(day)){   
	                return false;   
	        }else{   
	            return true;   
	        }   
	  }   
	//去掉字串頭尾空格   
	function trim(str) {   
	    return str.replace(/(^\s*)|(\s*$)/g, "");   
	}  
</script>

線上演示    ←不信你試試

相關推薦

JS嚴格身份證

以下是根據身份證號碼編碼規則,使用JS對其進行有效性驗證程式碼<script type="text/javascript"> var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];

js 身份證

根據地區編碼、身份證格式、18位身份證需要驗證最後一位校驗位   //校驗身份證 function IdentityCodeValid(code) { var city = { 11: "北京", 12: "天津",

正則表示式身份證

最近在看正則表示式的一些東西,突然想起之前寫的一個關於身份證號碼校驗的小程式。當時寫身份證的校驗的時候,沒有考慮到輸入格式的校驗。程式的健壯性很差,現在我就用正則表示式來做身份證格式校驗,體驗一下正則表示式的奇妙用法。 正則表示式是對字串操作的一種邏輯公式,就

18位身份證藏了什麼玄機?用js教你身份證

大家好,想必各位程式猿已經有所發現,而相應地,在日常的開發任務需求了很多跟涉及到使用者的都幾乎需

JS銀行卡、輸入卡時放大效果

比較 left for 取出 abs focusout htm length rep 一、(校驗格式) function CheckBankNo(t_bankno) {   var bankno = $.trim(t_bankno);   if(bankno == ""

JS身份證號碼

function isIdCardNo(num) { num = num.toUpperCase(); //身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字,最後一位是校驗位,可能為數字或字元X。

JS身份證號碼(15位和18位)

//檢查生日是否正確 checkBirthday = function(card) { var len = card.length; //身份證15位時,次序為省(3位)市(3位)年(2位)月(2位)日(2位)校驗位(3位),皆為數字 if(len == '15') { var re_fifteen = /^

js 身份證號碼是否正確(摘抄整理)

/* 根據〖中華人民共和國國家標準 GB 11643-1999〗中有關公民身份號碼的規定,公民身份號碼是特徵組合碼,由十七位數字本體碼和一位數字校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。 地址碼錶示編碼物件常住戶口

身份證有效性

blog fun for return 計算 base == arch 特殊 1 /** 2 * 驗證身份證格式有效性 3 * @param type $id_card 4 * @return boolean 5 */ 6 function valid

一個完整身份證

一個完整校驗身份證 /** * 校驗身份證號合法性 */ function checkIdNumberValid(tex){ var tip = '輸入的身份證號有誤,請檢查後重新輸入!'; var num = tex.value; num = num.toUpperCase()

身份證號碼

校驗身份證是否正確,必須是二代身份證,身份證號是18位 /** * 驗證18位身份編碼是否合法 * * @param idCard 身份編碼 * @return 是否合法 */ public static boolean val

extjs/js時間

獲取 時間差 小寫 含義 月份 sunday 一個 ember nbsp //時間秒判斷var re=/^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(

身份證是否正確

package com.gc.action; public class Test {     public static void main(String[] args) {         String

js

1、判斷是否為數字(整數、小數) //使用isNaN()函式 //isNaN()的缺點就在於 null、空格以及空串會被按照0來處理 //isNaN: Not a Number function isRealNum(val){ // isNaN()函式 把空串 空格 以及NU

java 身份證

/**      * 校驗身份證      *       * @param idCard      * @return 校驗通過返回true,否則返回false      */     public

js資料【自用】

/** * 驗證密碼複雜度(必須包含數字字母) * @param str * @returns true:滿足規則,false:不滿足 */ function validateStr(str){ var reg1 = /^(([0-9]{1,})([a-z]{1

js金額js正則表示式,包含正負,小數點後兩位

js金額校驗,js正則表示式,包含正負,小數點後兩位,js程式碼如下: function isMoney(s) {        //金額 只允許正數        //var exp =

Js`HTML_文字框設定[span顏色字型等]

結合javascript對錶單中表格加操作 具體行為:如果前面複選框使用者選擇yes,那麼在下面一欄的表單後面加上紅色的* 問題圖例: 選擇前 選擇後 一個具體例子 func

jquery-validator.js外掛

首先引入檔案 <script src="jquery.js" type="text/javascript"></script> <script src="jquery.metadata.js" type="text/javascript">

JS實現IP地址,子網掩碼和預設閘道器的關係是否正確

//校驗IP地址,子網掩碼和預設閘道器的關係是否正確。w是預設閘道器,y是子網掩碼,i是IP地址。function checkIp(w,y,i){ var ws = w.split('.'); var ys = y.split('.'); var is