فيما يلي رمز التحقق من الصلاحية باستخدام JS وفقًا لقواعد ترميز رقم المعرف.
رمز IDCARD-VANIDED.JS كما يلي:
نسخ رمز رمز على النحو التالي:
/**
* قواعد تشفير 15 بت لبطاقة الهوية: DDDDDD YYMMDD XX P
* DDDDDD: الرمز الإقليمي
* Yymmdd: تاريخ الميلاد
* xx: ترميز الفئة المتسلسلة ، لا يمكن تحديده
* P: الجنس ، الأرقام الفردية من الذكور ، حتى الأرقام من الإناث
* <p />
* قواعد تشفير 18 بت لبطاقة الهوية: DDDDDDDDDDDDDDDDDD XXX Y
* DDDDDD: الرمز الإقليمي
* Yyyymmdd: تاريخ الميلاد
* xxx: ترميز نوع التسلسل ، لا يمكن تحديده ، الأرقام الفردية من الذكور ، حتى الأرقام هي الإناث
* Y: تحقق من الرمز ، يمكن الحصول على قيمة هذا الرقم من خلال أول 17 رقمًا
* <p />
* عامل الترجيح لعدد الرقم 18 رقمًا هو (يمينًا إلى اليسار) wi = [7 ، 9 ، 10 ، 5 ، 8 ، 4 ، 2 ، 1 ، 6 ، 7 ، 9 ، 10 ، 5 ، 8 ، 4 ، 2 ، 1]
* بت التحقق من y = [1 ، 0 ، 10 ، 9 ، 8 ، 7 ، 6 ، 5 ، 4 ، 3 ، 2]
* تركيبة الحساب لفحص بت: y_p = mod (∑ (ai × wi) ، 11)
* أنا 2 ... 18 رقمًا من رقم الهوية من اليمين إلى اليسار ؛
*
*/
var wi = [7 ، 9 ، 10 ، 5 ، 8 ، 4 ، 2 ، 1 ، 6 ، 3 ، 7 ، 9 ، 10 ، 5 ، 8 ، 4 ، 2 ، 1] ؛ // عامل الترجيح
var appaleCode = [1 ، 0 ، 10 ، 9 ، 8 ، 7 ، 6 ، 5 ، 4 ، 3 ، 2] ؛
وظيفة idcardvalidate (idcard) {
idcard = trim (idcard.replace ( / / g ، "")) ؛
if (idcard.length == 15) {
إرجاع isValidityBrithBrithBy15Idcard (IdCard) ؛
} آخر إذا (idcard.length == 18) {
var a_idcard = idcard.split ("") ؛ // احصل على صفيف بطاقة الهوية
if (isValidityBrithBrithby18Idcard (idcard) && ittruevalidateCodeby18Idcard (a_idcard)) {
العودة صحيح.
} آخر {
العودة كاذبة
}
} آخر {
العودة كاذبة
}
}
/**
* حدد ما إذا كان بت التحقق الأخير صحيحة عندما يكون رقم المعرف 18 رقمًا
* param a_idcard رقم معرف صفيف
* @يعود
*/
دالة isTrueValidateCodeBy18Idcard (a_idcard) {
var sum = 0 ؛
if (a_idcard [17] .ToLowerCase () == 'x') {
A_IDCARD [17] = 10 ؛ // استبدل رمز التحقق مع البت الأخير X مع 10 للعمليات اللاحقة
}
لـ (var i = 0 ؛ i <17 ؛ i ++) {
sum += wi [i] * a_idcard [i] ؛ // sum الموزونة
}
valcodeposition = sum ٪ 11 ؛ // أين يمكن الحصول على رمز التحقق
if (a_idcard [17] == ValidEcode [ValCodeposition]) {
العودة صحيح.
} آخر {
العودة كاذبة
}
}
/**
*احكم على ما إذا كان رجلًا أو امرأة من خلال بطاقة الهوية
* param idcard 15/18 رقم هوية
* return 'أنثى'-Female'-male
*/
وظيفة maleorfemalbyidcard (idcard) {
idcard = trim (idcard.replace (// g ، "")) ؛ // معالجة رقم المعرف. بما في ذلك المسافات بين الشخصيات.
if (idcard.length == 15) {
if (idcard.substring (14،15) ٪ 2 == 0) {
عودة "أنثى" ؛
}آخر{
العودة "ذكر" ؛
}
} آخر إذا (idcard.length == 18) {
if (idcard.substring (14،17) ٪ 2 == 0) {
عودة "أنثى" ؛
}آخر{
العودة "ذكر" ؛
}
}آخر{
العودة لاغية.
}
// يمكن معالجة الأحرف الواردة مباشرة كصفيف
// if (idcard.length == 15) {
// ALERT (idcard [13]) ؛
// if (idcard [13] ٪ 2 == 0) {
// إرجاع 'الأنثى' ؛
// }آخر{
// العودة "ذكر" ؛
//}
//} آخر إذا (idcard.length == 18) {
// ALERT (IDCARD [16]) ؛
// if (idcard [16] ٪ 2 == 0) {
// إرجاع 'الأنثى' ؛
// }آخر{
// العودة "ذكر" ؛
//}
// }آخر{
// إرجاع فارغ ؛
//}
}
/**
* تحقق مما إذا كان عيد ميلاد في رقم الهوية المكون من 18 رقماً هو عيد ميلاد صالح
* @param idcard سلسلة معرف الكتاب 18 بت
* @يعود
*/
وظيفة isValidityBrithbrithby18Idcard (idcard18) {
var year = idcard18.SubString (6،10) ؛
var month = idcard18.SubString (10،12) ؛
var day = idcard18.SubString (12،14) ؛
var temp_date = تاريخ جديد (السنة ، parsefloat (شهر) -1 ، parsefloat (day)) ؛
// استخدم GetLyear () هنا للحصول على العام لتجنب مشكلة أخطاء الألفية
if (temp_date.getlyear ()! = parsefloat (السنة)
|| temp_date.getmonth ()! = parsefloat (شهر) -1
|| temp_date.getDate ()! = parsefloat (اليوم)) {
العودة كاذبة
}آخر{
العودة صحيح.
}
}
/**
* تحقق مما إذا كان عيد ميلاد في رقم الهوية المكون من 15 رقمًا هو عيد ميلاد صالح
* param idcard15 سلسلة معرف كتاب 15 بت
* @يعود
*/
وظيفة isValidityBrithBrithby15Idcard (idcard15) {
var year = idcard15.substring (6،8) ؛
var month = idcard15.substring (8،10) ؛
var day = idcard15.substring (10،12) ؛
var temp_date = تاريخ جديد (السنة ، parsefloat (شهر) -1 ، parsefloat (day)) ؛
// لعمرك في بطاقة الهوية القديمة الخاصة بك ، لا تحتاج إلى النظر في مشكلة الدودة الألفية واستخدام طريقة getyear ()
if (temp_date.getyear ()! = parsefloat (السنة)
|| temp_date.getmonth ()! = parsefloat (شهر) -1
|| temp_date.getDate ()! = parsefloat (اليوم)) {
العودة كاذبة
}آخر{
العودة صحيح.
}
}
// قم بإزالة مساحات رأس السلسلة والذيل
وظيفة trim (str) {
إرجاع str.replace (/(^/s*) | (/s*$)/g ، "") ؛
}
بالنسبة للرمز أعلاه ، في الاستخدام الفعلي للجنس ، يمكنك أولاً تحديد ما إذا كانت بطاقة الهوية صالحة. لا يتم إصدار هذا النوع من الحكم في مثال هذا الرمز ، ويشعر أنه عديم الفائدة قليلاً ويمكن إثراءه بالكامل وفقًا للموقف في الاستخدام الفعلي.