通常のルールは次のとおりです:
$patten='/^[1-9]\d{5}[1-2]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/';//就是最后这个4
表2. よく使われる修飾子
コード/構文の説明
* 0 回以上繰り返します
+ 1 回以上繰り返します
? 0 回以上繰り返します
{n} n 回繰り返します
{n,} n 回以上繰り返します
{n,m} n を繰り返します
15桁のIDカードがどのように配置されているのか分からないので、参考にさせていただきます
世代(現在は廃止されており、判断する必要はありません)
市外局番(6桁) 生まれ年(2桁) 誕生月(2桁) 生まれた日(2桁) 番号(3桁) 計15桁
第二世代
市外局番(6桁) 生年( 4桁) 誕生月(2桁) 生年月日(2桁) 数字(3桁) チェックデジット(1桁) 計18桁
チェックデジットは[dX])?$/の場合もございます
3. 正確な判定(第 2 世代) はチェック コード生成アルゴリズムを使用する必要があります。各国言語の「IDカード認証コード生成機能」はオンラインでご覧いただけます
1. ID番号の意味:
生成(現在は廃止されており、判断する必要はありません)
第二世代
市外局番(6桁) 誕生年(4桁) 誕生月(2桁) 誕生日(2桁) ) シリアル番号(3桁) チェックデジット(1桁) 合計18桁
チェックデジットは{2}[dX])?$/
3. 正確な判断…
function validateIdNumber($idnumber){ $patten='/^\d{17}$/'; preg_match($patten,$idnumber,$match); var_dump($match);//为什么这也显示的是FALSE??我16位就可以,加到17就不行了,这到底是什么问题啊??? } validateidnumber(22111111111234563);
2階xuzuningさんの回答より引用: 1. ID番号の意味:
世代(現在は廃止され判定不要)
市外局番(6桁) 生まれた年(2桁) 生まれた月(2桁) 生まれた日(2桁) 通し番号(3桁) 合計15桁
第二世代
チェックデジットは、何が問題ですか? 16 桁を超えると科学表記に変更されるため、16 桁を超える数値は元の数値ではありません