以下は、ID番号エンコーディングルールに従ってJSを使用した有効検証コードです。
idcard-validate.jsコードは次のとおりです。
次のようにコードコードをコピーします。
/**
* IDカードの15ビットエンコーディングルール:DDDDDD YYMMDD XX P
* DDDDDD:地域コード
* yymmdd:生年月日
* XX:シーケンシャルクラスエンコーディングは、決定できません
* P:性別、奇数は男性で、偶数は女性です
* <p />
* IDカードの18ビットエンコードルール:DDDDDD YYYYMMDD XXX Y
* DDDDDD:地域コード
* yyyymmdd:生年月日
* XXX:シーケンスタイプのエンコード、決定できません、奇数数は男性、偶数は女性です
* Y:コードを確認してください、この数字の値は最初の17桁で取得できます
* <p />
* 18桁の重み係数は(右から左)wi = [7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、8、8、4、 2、1]
*検証ビットy = [1、0、10、9、8、7、6、5、4、3、2]
*チェックビットの計算式:y_p = mod(∑(ai×wi)、11)
* Iは、右から左へのID番号の18桁です。
*
*/
var wi = [7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2、1]; //加重係数
var valideCode = [1、0、10、9、8、7、6、5、4、3、2]; // IDカード検証ビット値。
関数idcardvalidate(idcard){
idcard = trim(idcard.replace( / / g、 ""));
if(idcard.length == 15){
usaliditybrithby15idcard(idcard)を返します。
} else if(idcard.length == 18){
var a_idcard = idcard.split( ""); // IDカードアレイを取得します
if(isvaliditybrithby18idcard(idcard)&& istruevalidatecodeby18idcard(a_idcard)){
trueを返します。
} それ以外 {
falseを返します。
}
} それ以外 {
falseを返します。
}
}
/**
* ID番号が18桁の場合、最後の確認ビットが正しいかどうかを判断します
* @param a_idcard ID番号配列
* @戻る
*/
関数ISTRUEVALIDATECODEBY18IDCARD(a_idcard){
var sum = 0; //加重和変数を宣言します
if(a_idcard [17] .tolowercase()== 'x'){
a_idcard [17] = 10; //後続の操作の場合、検証コードを最後のビットxに10に置き換えます
}
for(var i = 0; i <17; i ++){
sum += wi [i] * a_idcard [i]; //加重合計
}
valcodeposition = sum%11; //検証コードを取得する場所
if(a_idcard [17] == validecode [valcodeposition]){
trueを返します。
} それ以外 {
falseを返します。
}
}
/**
*IDカードを介して男性か女性かを判断する
* @param idcard 15/18桁のID番号
* @return 'female'-female'-male
*/
function maleorfemalbyidcard(idcard){
idcard = trim(idcard.replace(// g、 "")); // ID番号を処理します。文字間のスペースを含む。
if(idcard.length == 15){
if(idcard.substring(14,15)%2 == 0){
「女性」を返します。
}それ以外{
「男性」を返します。
}
} else if(idcard.length == 18){
if(idcard.substring(14,17)%2 == 0){
「女性」を返します。
}それ以外{
「男性」を返します。
}
}それ以外{
nullを返します。
}
//着信文字は配列として直接処理できます
// if(idcard.length == 15){
// alert(idcard [13]);
// if(idcard [13]%2 == 0){
//「女性」を返します。
// }それ以外{
// 'MALE'を返します。
//}
//} else if(idcard.length == 18){
// alert(idcard [16]);
// if(idcard [16]%2 == 0){
//「女性」を返します。
// }それ以外{
// 'MALE'を返します。
//}
// }それ以外{
// nullを返します。
//}
}
/**
* 18桁のID番号の誕生日が有効な誕生日であるかどうかを確認してください
* @param idcard 18ビットブックID文字列
* @戻る
*/
function asaliditybrithby18idcard(idcard18){
var year = idcard18.substring(6,10);
var month = idcard18.substring(10,12);
var day = idcard18.substring(12,14);
var temp_date = new Date(year、parsefloat(month)-1、parsefloat(day));
//ここでgetflyear()を使用して、ミレニアムバグの問題を避けるために年を取得する
if(temp_date.getFullyear()!= parsefloat(year)
|| temp_date.getmonth()!= parsefloat(month)-1
|| temp_date.getDate()!= parsefloat(day)){
falseを返します。
}それ以外{
trueを返します。
}
}
/**
* 15桁のID番号の誕生日が有効な誕生日であるかどうかを確認してください
* @param idcard15 15ビットブックID文字列
* @戻る
*/
function asaliditybrithby15Idcard(idcard15){
var year = idcard15.substring(6,8);
var month = idcard15.substring(8,10);
var day = idcard15.substring(10,12);
var temp_date = new Date(year、parsefloat(month)-1、parsefloat(day));
//古いIDカードの年齢については、ミレニアムワームの問題を考慮してgetYear()メソッドを使用する必要はありません
if(temp_date.getyear()!= parsefloat(year)
|| temp_date.getmonth()!= parsefloat(month)-1
|| temp_date.getDate()!= parsefloat(day)){
falseを返します。
}それ以外{
trueを返します。
}
}
//文字列ヘッドとテールスペースを削除します
関数トリム(str){
return str.replace(/(^/s*)|(/s*$)/g、 "");
}
上記のコードでは、性別を実際に使用すると、まずIDカードが有効かどうかを判断できます。この種の判断は、このコードの例では行われておらず、少し役に立たないと感じており、実際の使用の状況に応じて完全に豊かにすることができます。