首頁  >  文章  >  後端開發  >  PHP正規表示式驗證輸入字串是否為正確的ISBN編碼格式

PHP正規表示式驗證輸入字串是否為正確的ISBN編碼格式

WBOY
WBOY原創
2023-06-24 21:18:321389瀏覽

ISBN(International Standard Book Number),即國際標準圖書編號,是用來標示書籍的連續數字。它由十位或十三位數字組成,並經過一定的計算校驗,以確保其正確性。在這篇文章中,我們將介紹如何使用PHP正規表示式來驗證輸入字串是否為正確的ISBN編碼格式。

ISBN編碼格式

ISBN編碼由10位元或13位數組成,前9位數為書籍的識別碼,第10位元為校驗碼。對於13位的ISBN編碼,前3位是國家或地區代碼,接著是出版社的識別碼,然後是書籍的識別碼,最後是校驗碼。對於10位數的ISBN編碼,前9位也是書籍的識別碼,但沒有國家或地區代碼和出版社識別碼,最後一位仍為校驗碼。

校驗規則

校驗規則如下:

對於10位元ISBN編碼:校驗碼為最後一位數字,計算規則如下:將前9位數字分別乘以1~9的權重係數,再將這9個乘積相加,得到一個總和。然後將這個總和對11取餘數,將餘數與11進行減法運算,得到校驗碼。若餘數為10,則校驗碼為大寫字母X。

對於13位ISBN編碼:校驗碼為最後一位數字,計算規則如下:將前12位數字分別乘以1或3的權重係數,然後將這13個乘積相加,得到一個總和。然後將這個總和對10取餘數,再用10減去這個餘數,得到校驗碼。

PHP正規表示式

下面是PHP正規表示式的程式碼,用於驗證輸入字串是否為正確的ISBN編碼格式。

對於10位元ISBN編碼:

function checkISBN10($isbn) {
    if (!preg_match('/^d{9}[d|X]$/i', $isbn)) {
        return false;
    }
    $checkbit = 0;
    for ($i = 0; $i < 9; $i++) {
        $checkbit += intval($isbn{$i}) * (10 - $i);
    }
    $checkbit = ($checkbit % 11 == 0) ? 0 : 11 - ($checkbit % 11);
    return ($isbn{9} == ($checkbit == 10 ? 'X' : strval($checkbit)));
}

對於13位元ISBN編碼:

function checkISBN13($isbn) {
    if (!preg_match('/^d{13}$/i', $isbn)) {
        return false;
    }
    $checkbit = 0;
    for ($i = 0; $i < 12; $i++) {
        $checkbit += intval($isbn{$i}) * (($i % 2 == 0) ? 1 : 3);
    }
    $checkbit = 10 - ($checkbit % 10);
    return ($isbn{12} == strval($checkbit));
}

這兩個函數分別接受一個ISBN編碼作為輸入,並傳回一個布林值,表示該編碼是不是一個合法的ISBN編碼。如果是合法的編碼,則傳回true,否則傳回false。

這些函數使用正規表示式,檢查輸入是否符合ISBN編碼的格式。然後使用校驗規則計算校驗碼,並將其與輸入的編碼中的校驗碼進行比較,以確定該編碼是否合法。

結論

本文介紹如何使用PHP正規表示式來驗證輸入字串是否為正確的ISBN編碼格式。雖然ISBN編碼的校驗規則比較複雜,但藉助正規表達式的強大功能,我們可以方便地實現這種驗證。開發者可以使用這些函數來檢查使用者輸入的ISBN編碼,以確保其正確性。

以上是PHP正規表示式驗證輸入字串是否為正確的ISBN編碼格式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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