1. 程式人生 > >使用javascript實現身份證校驗與資訊提取

使用javascript實現身份證校驗與資訊提取

我們先了解一下身份證是怎麼校驗的:

將前面的身份證號碼17位數分別乘以不同的係數,將這17位數字和係數相乘的結果相加,然後除以11求餘,根據最後的餘數對應校驗碼,判斷身份證是否符合要求。

現在我們開始寫程式碼

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p>身份證號:<input type='text' id='idCard'/></p>
	<P>出生日期:<input type='text' readonly id='age'/></P>
	<P>
		性  別:<input type='radio' disabled name='sex' id='man'>男
		<input type='radio' name='sex' disabled id='woman'>女
	</P>
	<P>籍  貫:<input type='text' readonly id='dess'></P>
	<button type='button' id='btnSub'>確定</button>
	
	<script src='js/jquery-1.11.3.min.js'></script>
	<script>
	$("#btnSub").click(function(){

		var idCard = $("#idCard").val();


		//根據身份證不同的位置,擷取相對應的資料
		var sex = idCard.substring(16,17);
		var num = idCard.substring(17,18);
		var year = idCard.substring(6,10);
		var month = idCard.substring(10,12);
		var day = idCard.substring(12,14);
		var age = year+"-"+month+"-"+day;
		var date = new Date(age);
		var sum = 0;
		var arr = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,0];
		var arr2 = [1,0,'X',9,8,7,6,5,4,3,2];
		
		//判斷身份證是否為空,或者長度有沒有達到要求(這裡規定身份證18位)
		if(!(idCard && /^[\d]{18}$/.test(idCard))){
			alert("身份證輸入格式不對!")
			return false;
		}else{
			
			//計算第18位數 是否符合要求
			for(var i=0;i<18;i++){
				sum += idCard.substring(i,i+1)*arr[i]
			}
			if(num== arr2[sum%11] || num===arr2[sum%11]){

				$("#age").val(age)
				if(sex%2 == 1){
					$("#man").prop("checked","true")
				}else{
					$("#woman").prop("checked","true")
				}

				$.ajax({
					url:"IdCardServlet",
					type:"get",
					data:{idCard:idCard},
					success:function(data){
						$.each(data,function(index,obj){
							$("#dess").val(obj.detail);
						})
					}
				})
			}else{
				alert("身份證輸入格式不對!")
				$("#man").removeAttr("checked")
				$("#woman").removeAttr("checked")
				$("#dess").val("");
				$("#age").val("");
				return false;
			}
			
		}
		
	})
	
	</script>
</body>
</html>

效果圖:

如果需要顯示籍貫的話,需要那對應的數字去資料庫中查詢顯示。