首頁  >  文章  >  後端開發  >  PHP正規表示式驗證省份證號碼的方法

PHP正規表示式驗證省份證號碼的方法

PHPz
PHPz原創
2023-06-24 10:53:181095瀏覽

隨著網路的發展,個人資訊的洩漏問題已經成為了一個不容忽視的問題。比如說身分證號碼,身分證號碼是我們辦理很多事情都需要提供的重要身分證明資料之一。但是,如果身分證號碼被惡意使用或洩露,會給我們的生活帶來很多麻煩。為了加強個人資訊的保護,我們可以透過編寫程式來驗證使用者輸入的身分證號碼是否合法,PHP正規表示式就是常用的方法。

一、身分證號碼的組成規則
在使用正規表示式驗證身分證號碼之前,我們先來了解中國身分證號碼的組成規則:

1.18位元身分證號由17位數和1位校驗碼組成;
2.前6位是所在地區的行政區劃代碼;
3.第7至14位是出生年月日,例如870905表示1987年9月5日出生;
4.第15至17位是順序號,代表本人在當地戶籍管理部門的登記順序;
5.第18位是校驗碼,用來驗證身分證的正確性。

二、使用PHP正規表示式驗證身分證號碼

在PHP中,使用preg_match()函數可以符合正規表示式。下面是一個使用正規表示式驗證身分證號碼的PHP程式碼:

function validateIDCard($id_card)
{
    //正则表达式
    $reg = '/^d{17}[0-9x]$/i';
    //匹配
    if(preg_match($reg, $id_card))
    {
        //校验码验证
        $arr = str_split($id_card);
        $last = strtolower($arr[17]) == 'x' ? 10 : $arr[17];
        $card_sum = 0;
        $wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        for($i = 0; $i < 17; $i++)
        {
            $card_sum += $arr[$i] * $wi[$i];
        }
        $card_sum %= 11;
        $card_sum = 12 - $card_sum;
        if($card_sum == 10)
        {
            $card_sum = 'x';
        }
        if($card_sum == strtolower($arr[17]))
        {
            return true;
        }
    }
    return false;
}

在這段程式碼中,我們先定義了一個正規表示式$reg,在該正規表示式中,我們使用^d {17}[0-9x]$來符合18位身分證號碼,其中d表示數字,{17}表示符合17位數字,[0-9x]表示最後一位可以是數字或字母x。

然後我們使用preg_match()函數來進行正規比對。如果配對成功,則進入後續的校驗碼驗證。校驗碼驗證主要是透過取每一位的乘積再乘以一個固定的因子,最後將得到的結果進行校驗,如果校驗碼正確,則說明身分證號碼是正確的。

三、總結

身分證號碼的正確性是非常關鍵的,如果不正確,會為我們的生活帶來很多麻煩。透過編寫程序,我們可以驗證使用者輸入的身份證號碼是否正確。本文介紹了使用PHP正規表示式驗證身分證號碼的方法,希望本文能幫助大家。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn