資料載入中

我是 chung

鎖住記憶

  • Chung
  • 0°C
  • 8 年又 289 天

如何使用javascript判斷身分證號跟居留證格式

首先,是把如何用javascript判斷字串中必須包含中英文的方式延伸~

將每一個字轉換成 ASCII 碼。

在使用for迴圈去檢查每個字是不是在  65-90(a-z) 的範圍。
var text='A12345678';
var res = text.toUpperCase(); //將字母由小寫變大寫

var check=[];
check['alpha']=0;
for(var i=0;i[2;i++){
var t=res.charCodeAt(i);

if(t]=65 && t[=90){
check['alpha']++;
}}

因為身分證的第一個字是英文字母,而居留證則是前二個字是英文字母。

因此底下可以先做最基本的判斷,得到的ID是屬於身分證還是居留證~
if(check['alpha']==2){
if (!check_resident_ID(res)){
alert(res+"此居留證字號錯誤、少碼或空格,請確認後重新輸入。")
exit();
}

}else if(check['alpha']==1){
if (!checkID(res)){
alert(res+"此身分證字號錯誤、少碼或空格,請確認後重新輸入。")
exit();
}

}else{
alert('ID錯誤');
}

接著身分證部分的檢查function如下~
function checkID( id ) {
//alert(id)
tab = "ABCDEFGHJKLMNPQRSTUVXYWZIO"
A1 = new Array (1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3 );
A2 = new Array (0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5 );
Mx = new Array (9,8,7,6,5,4,3,2,1,1);

//驗證填入身分證字號長度及格式
if ( id.length != 10 ) return false;
i = tab.indexOf( id.charAt(0) );
if ( i == -1 ) return false;
sum = A1[i] + A2[i]*9;

for ( i=1; i[10; i++ ) {
v = parseInt( id.charAt(i) );
if ( isNaN(v) ) return false;
sum = sum + v * Mx[i];
}
if ( sum % 10 != 0 ) return false;
return true;
}

居留證的檢查function如下~
function check_resident_ID( id ) {

//驗證填入身分證字號長度及格式
if(id.length != 10){
return false;
}

//格式,用正則表示式比對第一個字母是否為英文字母
if(isNaN(id.substr(2,8)) ||
(!/^[A-Z]$/.test(id.substr(0,1))) || (!/^[A-Z]$/.test(id.substr(1,1)))){
return false;
}

var idHeader = "ABCDEFGHJKLMNPQRSTUVXYWZIO"; //按照轉換後權數的大小進行排序
//這邊把身分證字號轉換成準備要對應的
id = (idHeader.indexOf(id.substring(0,1))+10) +
'' + ((idHeader.indexOf(id.substr(1,1))+10) % 10) + '' + id.substr(2,8);
//開始進行身分證數字的相乘與累加,依照順序乘上1987654321

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

checkNum = parseInt(id.substr(10,1));
//模數 - 總和/模數(10)之餘數若等於第九碼的檢查碼,則驗證成功

console.log(10 - snumber % 10);
if((10 - snumber % 10) == checkNum){
return true;
}
else{
return false;
}

}

以上紀錄~

台北市內湖區江南街71巷75弄 Go

  • javascript 判斷字串中包含中英文
  • 身分證與居留證的字母檢查
  • ASCII 碼轉換與字元範圍
  • 使用 for 迴圈檢查字元
  • 身分證和居留證的基本判斷方法
https://innstory.com/story-如何使用javascript判斷身分證號跟居留證格式-1267

上一篇
 如何用javascript判斷字串中必須包含中英文

下一篇
小老虎探險 

發表留言

  • 鄭暮川

    這種檢查方法挺實用的,簡單明瞭。
    2026-03-18 下午 8 點回覆

作者簡介

我是chung,網路工作者

主業是網站系統開發建置
副業是做夢、紀錄故事
作品請參考:teme.biz
做夢請參考:innstory.com
聯絡:chung.teme@gmail.com

有人用筆寫日記,有人用歲月寫日記,有人用照片寫日記,而我,用innstory寫日記。


推薦閱讀

作者其他相關類別故事

colorbox 使用 onclick href 驅動

colorbox 使用 on…

Chung 11 年又 43 天 2.6K

colorbox 一直都是很優秀的Lightbox外掛... 目前的網站中幾乎或多或少都會用到Lig...

暑期課後班都在做些甚麼

暑期課後班都在做些甚麼

Chung 2025-07-31 下午 7 點 341

這天,5U從學校帶回來一些精美的作品,這是他在暑期課後班學習到的藍晒圖作品。 多虧了他,我重新查詢...

說故事比賽狐假虎威

說故事比賽狐假虎威

Chung 2025-11-20 下午 7 點 328

從5U開始參加說故事比賽後,5G就在旁邊一直模仿。 她只是覺得好玩,覺得鬧哥哥很有趣,誰也沒想...


推薦閱讀

這個地址也發生了其他故事

這是菠蘿麵包.....

這是菠蘿麵包.....

Chung 7 年又 273 天 1.7K

我記得我買的是菠蘿麵包..... 怎麼被5U吃過後,突然覺得這麵包很可憐啊~~~ 這傢伙只給我拔...

一聽到要帶他出門,馬上給了我一個笑得開懷的笑容

一聽到要帶他出門,馬上給了我…

Chung 7 年又 273 天 1.8K

一聽到要帶他出門,馬上整裝完畢( ̄∇ ̄) 堅持穿上自己選擇的鞋子,還要自己穿。 堅持背上背包。 ...

媽媽。。。。美麗

媽媽。。。。美麗

Bc Lok 7 年又 271 天 1.7K

我想記住我在兒子心目中美麗的模樣,而發出的童言贊賞,所以難得的寫下這篇文章作爲記憶。 某天上班天...


附近景點

這個地址-台北市內湖區江南街71巷75弄-附近還有甚麼?

  • 舊高等農林學校作業室(磯永吉紀念室)
  • 老松國小
  • 北投臺灣銀行舊宿舍
  • 士林慈諴宮
  • 圓山別莊
  • 司法大廈