參考網址: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