首頁 > 後端開發 > php教程 > PHP正規表示式驗證身分證號碼的校驗碼的方法

PHP正規表示式驗證身分證號碼的校驗碼的方法

WBOY
發布: 2023-06-24 10:58:02
原創
1809 人瀏覽過

身分證號碼是人們在日常生活中經常需要使用的一種重要證件,而身分證號碼中的最後一位校驗碼的驗證是身分證號碼是否合法的一個重要部分。在使用PHP程式設計時,我們可以透過正規表示式來對身分證號碼中的校驗碼進行驗證,以確保身分證號碼的有效性。以下就介紹PHP正規表示式驗證身分證號碼的校驗碼的方法。

  1. 身分證號碼的格式

首先,我們要先了解一下身分證號碼的格式。身分證號碼由18位數字和字母組成,其中前17位是表示省、市、縣區、出生日期等訊息,最後一位是校驗碼。而校驗碼的計算規則如下:

  1. 將身分證號碼前17位依序乘以對應的權重因子,即第i位的權重因子為Wi。
  2. 將這17個乘積相加得到S。
  3. 校驗碼N為11減去S除以11的餘數,其中X表示10。
  4. 正規表示式的編寫

有了以上的基礎知識,我們就可以編寫正規表示式進行身分證號碼的校驗了。下面是一個範例程式碼:

function checkIDCard($id_card){
    $pattern = '/^d{6}(19|20)d{2}(0d|1[0-2])([0-2]d|3[0-1])d{3}[0-9X]$/';
    if(preg_match($pattern, $id_card)){
        $wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        $ai = str_split(substr($id_card, 0, 17));
        $n = 0;
        for($i=0; $i<17; $i++){
            $n += $wi[$i] * $ai[$i];
        }
        $c = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
        $check_code = $c[$n % 11];
        return $check_code == substr($id_card, -1);
    }
    return false;
}

$id_card = '33010219950917413X';
if(checkIDCard($id_card)){
    echo '身份证号码校验成功';
}else{
    echo '身份证号码校验失败';
}
登入後複製

上面的正規表示式中,d表示符合數字,{6}表示符合6次,(19|20)d{2}表示符合以19或20開頭的4位數字,(0d|1[0-2])表示符合01~12的月份,([0-2]d|3[0-1])表示符合01~31的日期,d{3}表示配對多三個數字,[0-9X]$表示以數字或X結尾。這樣就可以有效地匹配身分證號碼了。

  1. 測試驗證

最後,我們可以測試一下我們的程式碼是否有效。我們可以將身分證號碼的校驗碼進行改動,以檢查代碼的校驗功能是否正常。例如:

$id_card = '330102199509174133';
登入後複製

或:

$id_card = '330102199509174139';
登入後複製

這兩個身分證號碼的校驗碼都是錯的,應該無法通過校驗。而當我們執行程式碼後,就會看到輸出了身分證號碼校驗失敗的結果,證明我們的程式碼是可以正常運作的。

總之,利用PHP正規表示式驗證身分證號碼的校驗碼的方法是比較簡單的,只需要寫一個適當的正規表示式和相關函數,就可以輕鬆地完成身分證號碼的校驗工作。

以上是PHP正規表示式驗證身分證號碼的校驗碼的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板