在 Web 開發中,驗證用戶輸入的身份證號碼是常見需求。中國大陸身份證號碼分為 15 位(舊版)和 18 位(新版)兩種格式,且包含校驗碼邏輯。本文將介紹如何在 JSP 頁面中編寫 JavaScript 代碼,實現高效、準確的身份證號碼前端驗證。
keyup 事件許多開發者嘗試在 onkeyup 事件中實時校驗,但這存在明顯缺陷:用戶無法一次性輸入完整的 15 或 18 位數字,導致校驗邏輯在輸入過程中頻繁觸發錯誤提示,嚴重影響用戶體驗。
onblur 事件建議將驗證邏輯綁定在輸入框的 onblur(失去焦點)事件上。這樣只有當用戶完成輸入並移開焦點時,才會觸發一次完整的格式校驗,既符合用戶操作習慣,又能減少不必要的計算開銷。
<input type="text" id="idCard" name="idCard" onblur="validateIdCard(this.value)" />
<script>
function validateIdCard(val) {
// 1. 基礎正則:15位或18位(最後一位可為X/x)
var reg = /(^\d{15}$)|(^\d{17}(\d|X|x)$)/;
if (!reg.test(val)) {
alert("身份證號碼格式錯誤:必須為15位或18位數字");
return false;
}
// 2. 進階校驗(可選):出生日期、校驗碼等
// ... 此處省略詳細算法實現 ...
return true;
}
</script>
前端驗證僅作為第一道防線,**後端(Java Controller/Service)必須再次嚴格校驗**,防止繞過瀏覽器提交非法數據。合理選擇 onblur 而非 onkeyup,能顯著提升表單交互體驗。