Javascript 驗證身份證字號以及居留証字號

參考網址:https://gist.github.com/twlca/05fe7732a935e2e0937e3aafce8d8a02

參考網址:菜鳥工程師

//身分證字號或外籍人士居留証驗證
/*
 * 第一個字元代表地區,轉換方式為:A轉換成1,0兩個字元,B轉換成1,1……但是Z、I、O分別轉換為33、34、35
 * 第二個字元代表性別,1代表男性,2代表女性
 * 第三個字元到第九個字元為流水號碼。
 * 第十個字元為檢查號碼。
 * 每個相對應的數字相乘,如A123456789代表1、0、1、2、3、4、5、6、7、8,相對應乘上1987654321,再相加。
 * 相加後的值除以模數,也就是10,取餘數再以模數10減去餘數,若等於檢查碼,則驗證通過
 */
function studIdNumberIdentify(nationality, idNumber){
	
	studIdNumber = idNumber.toUpperCase();

	//本國人
	if(nationality == 0){
		
		//驗證填入身分證字號長度及格式
		if(studIdNumber.length != 10){
			alert("長度不足");
			return false;
		}
		//格式,用正則表示式比對第一個字母是否為英文字母
		if(isNaN(studIdNumber.substr(1,9)) || 
				(!/^[A-Z]$/.test(studIdNumber.substr(0,1)))){
			alert("格式錯誤");
			return false;
		}
		
		var idHeader = "ABCDEFGHJKLMNPQRSTUVXYWZIO"; //按照轉換後權數的大小進行排序
		//這邊把身分證字號轉換成準備要對應的
		studIdNumber = (idHeader.indexOf(studIdNumber.substring(0,1))+10) +''+ studIdNumber.substr(1,9);
		//開始進行身分證數字的相乘與累加,依照順序乘上1987654321
		s = parseInt(studIdNumber.substr(0,1)) + 
		parseInt(studIdNumber.substr(1,1)) * 9 + 
		parseInt(studIdNumber.substr(2,1)) * 8 + 
		parseInt(studIdNumber.substr(3,1)) * 7 + 			
		parseInt(studIdNumber.substr(4,1)) * 6 + 
		parseInt(studIdNumber.substr(5,1)) * 5 + 
		parseInt(studIdNumber.substr(6,1)) * 4 + 
		parseInt(studIdNumber.substr(7,1)) * 3 + 
		parseInt(studIdNumber.substr(8,1)) * 2 + 
		parseInt(studIdNumber.substr(9,1));

		checkNum = parseInt(studIdNumber.substr(10,1));
		//模數 - 總和/模數(10)之餘數若等於第九碼的檢查碼,則驗證成功
		//若餘數為0,檢查碼就是0
		if((s % 10) == 0 || (10 - s % 10) == checkNum){
			return true;
		}
		else{
			return false;
		}
		
	}
	//外籍生,居留證號規則跟身分證號差不多,只是第二碼也是英文字母代表性別,跟第一碼轉換二位數字規則相同,但只取餘數
	else{
		
		//驗證填入身分證字號長度及格式
		if(studIdNumber.length != 10){
			alert("長度不足");
			return false;
		}
		//格式,用正則表示式比對第一個字母是否為英文字母
		if(isNaN(studIdNumber.substr(2,8)) || 
				(!/^[A-Z]$/.test(studIdNumber.substr(0,1))) || 
					(!/^[A-Z]$/.test(studIdNumber.substr(1,1)))){
			alert("格式錯誤");
			return false;
		}
		
		var idHeader = "ABCDEFGHJKLMNPQRSTUVXYWZIO"; //按照轉換後權數的大小進行排序
		//這邊把身分證字號轉換成準備要對應的
		studIdNumber = (idHeader.indexOf(studIdNumber.substring(0,1))+10) + 
		'' + ((idHeader.indexOf(studIdNumber.substr(1,1))+10) % 10) + '' + studIdNumber.substr(2,8);
		//開始進行身分證數字的相乘與累加,依照順序乘上1987654321

		s = parseInt(studIdNumber.substr(0,1)) + 
		parseInt(studIdNumber.substr(1,1)) * 9 + 
		parseInt(studIdNumber.substr(2,1)) * 8 + 
		parseInt(studIdNumber.substr(3,1)) * 7 + 			
		parseInt(studIdNumber.substr(4,1)) * 6 + 
		parseInt(studIdNumber.substr(5,1)) * 5 + 
		parseInt(studIdNumber.substr(6,1)) * 4 + 
		parseInt(studIdNumber.substr(7,1)) * 3 + 
		parseInt(studIdNumber.substr(8,1)) * 2 + 
		parseInt(studIdNumber.substr(9,1));

		//檢查號碼 = 10 - 相乘後個位數相加總和之尾數。
		checkNum = parseInt(studIdNumber.substr(10,1));
		//模數 - 總和/模數(10)之餘數若等於第九碼的檢查碼,則驗證成功
		///若餘數為0,檢查碼就是0
		if((s % 10) == 0 || (10 - s % 10) == checkNum){
			return true;
		}
		else{
			return false;
		}
		
	}
	
}

 

新式外來人口統一證號專案

https://www.immigration.gov.tw/5382/5385/5388/7178/225074/


https://www.immigration.gov.tw/5385/7445/238440/238442/240309/cp_news

(一) 為建立友善外來人口環境,本署參考歐洲在臺商務協會建議,將舊式統號比照國民身分證字號編碼原則,改版為新式外來人口統一證號(1碼英文+9碼數字,以下簡稱新式統號),格式說明如下:
1. 第1碼:區域碼,依申請地區分,比照國人格式。
2. 第2碼:性別碼,8為男性,9為女性。
3. 第10碼:檢查碼。
(二) 歷經本署自107年起與各機關多次討論,並請總統府、五院及各目的事業主管機關(共計37個機關)盤點自身及所轄公、民營業者之系統修正完畢,本專案已於110年1月2日起實施,開始核發載有新式統號的證件。更多資訊請至本署「新式外來人口統一證號專區」查看(如下方連結)。

https://www.immigration.gov.tw/5385/7445/238440/

 

 

=================================================================
新舊證磨合期
https://www.etax.nat.gov.tw/etwmain/alien-tax-service/alien-tax-faq/vEQjgZZ
 

更新日期:113-04-22

自96年1月2日起:(一)由內政部移民署針對港澳、大陸地區人民及華僑於核發臺灣地區居留證時,配賦統一證號。(二)由內政部移民署針對一般之外僑於核發外僑居留證時,配賦統一證號。(三)未曾取得前述機關所發證件,而有申報所得稅需要之已入境外國人或在臺無戶籍本國人,一般外僑可由當事人或受託人檢附護照,向內政部移民署提出申請,港、澳、大陸地區人民及華僑則檢附臺灣地區入出境許可證件,向內政部移民署及其所屬台中、高雄及花蓮服務站提出申請核發「中華民國統一證號基資表」。
   有關統一證號之編排方式如下:
「統一證號」計有10個欄位,第1位為區域碼,第2位依據性別及核發機關分別為A、B、C、D,第3位至第9位係流水號,第10位為檢查號,即外僑居留證上所載之統一證號。例如:
(一)Mr. Robert W. Davison持有外僑居留證,他的統一證號即為AC12345678。
(二)Ms. Carol Lee持有外僑居留證,她的統一證號即為HD12345678。

 自110年1月2日起,內政部移民署推出新式外來人口統一證號,換號期間為110年1月2日起至119年12月31日止,120年1月1日起舊式統一證號全面停用。新式證號編排方式如下:
「統一證號」計有10個欄位,第1位為區域碼,第2位為性別碼,第3至第9位係流水號,第10位為檢查碼。例如:
(一)Mr. Robert W. Davison的舊式統一證號為AC12345678,新式證號為A812345678
(二)Ms. Carol Lee的舊式統一證號為HD12345678,新式證號為A912345678

 

可參考文件 
https://hackmd.io/@CynthiaChuang/Check-Resident-Certificate-Number

 

本篇發表於 程式設計。將永久鏈結加入書籤。