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中文網其他相關文章!