لقد كتبت العديد من الوظائف المتعلقة ببطاقات الهوية، وأعتقد شخصيًا أنها مفيدة جدًا، خاصة عند إجراء الاستبيانات عبر الإنترنت، فمن المفيد جدًا التحقق من بطاقات الهوية في المعلومات الشخصية، ومع ذلك، لا يوجد سوى عدد قليل من المتقدمين، لذلك قد أفعل ذلك أيضًا الاحتفاظ بها في مدونتي.
<?php
// احسب رمز التحقق من بطاقة الهوية وفقًا للمعيار الوطني GB 11643-1999
وظيفة idcard_verify_number($idcard_base){
if (strlen($idcard_base) != 17){ return false }
// عامل الترجيح
$factor = array(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;
لـ ($i = 0; $i < strlen($idcard_base); $i++){
$checksum += substr($idcard_base, $i, 1) * $factor[$i];
}
$mod = $المجموع الاختباري % 11;
$verify_number = $verify_number_list[$mod];
return $verify_number
}
// ترقية بطاقة الهوية المكونة من 15 رقمًا إلى 18 رقمًا
وظيفة idcard_15to18($idcard){
إذا (سترلين($idcard) != 15){
عودة كاذبة.
}آخر{
// إذا كان رمز تسلسل بطاقة الهوية هو 996 997 998 999، فهذه رموز خاصة للأشخاص الذين تزيد أعمارهم عن 100 عام
إذا (array_search(substr($idcard, 12, 3), array('996', '997', '998', '999')) !== false){
$idcard = substr($idcard, 0, 6) '18'.
}آخر{
$idcard = substr($idcard, 0, 6) '19'.
}
}
$idcard = $idcard_verify_number($idcard)
;
}
// التحقق من صحة رمز التحقق من بطاقة الهوية المكون من 18 رقمًا
وظيفة idcard_checksum18($idcard){
إذا (strlen($idcard) != 18){ return false }
$idcard_base = substr($idcard, 0, 17)
;
عودة كاذبة.
}آخر{
عودة صحيحة؛
}
}
?>
يشير $idcard_base إلى الرمز الأساسي الموجود في بطاقة الهوية. الرمز الأساسي موجود فقط في بطاقة الهوية المكونة من 18 رقمًا، وهو أول 17 رقمًا من بطاقة الهوية المكونة من 18 رقمًا ليست هناك حاجة لاستدعاء idcard_verify_number() مباشرة. تستخدم معظم التطبيقات المعتادة الوظيفتين الأخيرتين. لا تهتم هذه الوظائف بتنسيق سلسلة المعرف وتجري فحص التنسيق قبل الاتصال.