以前は、ID カードを検証したい場合、主に正規表現を使用してユーザー入力が 15 桁か 18 桁の完全な番号かを判断し、ID カードが合法かどうかを判断していました。以下に示す ID カードの検証は最も基本的なものにすぎません*。
コードは次のとおりです | コードをコピー |
$IDCard = 新しい IDCard(); var_dump($IDCard::isCard($_GET['card'])); /** * IDカード処理 */ クラスIDカード { // ID カードが正しいかどうかを確認します パブリック静的関数 isCard($card) { $card = self::to18Card($card); If (strlen($card) != 18) { false を返します } $cardBase = substr($card, 0, 17); return (self::getVerifyNum($cardBase) == strtoupper(substr($card, 17, 1))); } //15 桁の ID 番号を 18 桁にフォーマットします パブリック静的関数 to18Card($card) { $card = トリム($card); If (strlen($card) == 18) { $card を返します。 } If (strlen($card) != 15) { false を返します } // ID カードのシーケンス コードが 996 997 998 999 の場合、これらは 100 歳以上の人のための特別なコードです If (array_search(substr($card, 12, 3), array('996', '997', '998', '999')) !== false) { $card = substr($card, 0, 6) . substr($card, 6, 9); } else { $card = substr($card, 0, 6) . substr($card, 6, 9); } $card = $card .self::getVerifyNum($card); $card を返します。 } // 国家標準 gb 11643-1999 に基づいて ID カード検証コードを計算します プライベート静的関数 getVerifyNum($cardBase) { If (strlen($cardBase) != 17) { false を返します } // 重み係数 $factor = 配列(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); // チェックコードの対応する値 $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); $チェックサム = 0; for ($i = 0; $i $mod = $チェックサム % 11; $verify_number = $verify_number_list[$mod]; $verify_number を返します } } ?> |