/**
* ID カード 15 桁のエンコード規則: dddddd yymmdd xx p
* dddddd: 市外局番
* yymmdd: 生年月日
* xx: 連続エンコード、決定できません
* p : 性別、奇数は男性、偶数は女性
*
* ID カードの 18 桁のエンコード規則: dddddd yyyymmdd xxx y
* dddddd: 市外局番
* yyyymmdd: 生まれた年、月、日
* xxx: 連番コード、特定できません、奇数が男性、偶数が女性
* y: チェックコード、この桁の値は計算によって取得できます。最初の 17 桁
*
* 18 桁の数値の重み付け係数は (右から左に) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 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 )
* i は ID カード番号の右から左への 2 ~ 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 カード検証ビット値。10 は X を表します。
function IdCardValidate(idCard) {
idCard = trim(idCard.replace(/ /g, " "));
if (idCard.length == 15) {
return isValidityBrithBy15IdCard(idCard);
} else if (idCard.length == 18) {
var a_idCard = idCard.split (""); // ID カード配列を取得します
if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){
return true;
}
} else {
return false;
}
}
/**
* ID番号が18桁の場合、最後の認証桁が正しいか判定
* @param a_idCard IDカード番号配列
* @return
*/
function isTrueValidateCodeBy18IdCard(a_idCard) {
var sum = 0; を宣言します。加重合計変数
if (a_idCard[17].toLowerCase() == 'x') {
a_idCard[17] = 10;// 後続の処理を容易にするために、検証コードの最後の桁を x から 10 に置き換えます。操作
}
for ( var i = 0; i sum = Wi[i] * a_idCard[i];// 加重合計
}
valCodePosition = sum % 11;/ / 検証コードの位置を取得します
if (a_idCard[17] == ValideCode[valCodePosition]) {
return true;
} else {
return false; }
}
/**
* ID カードに基づいて男の子か女の子かを判断します
* @param idCard 15/18 桁の ID 番号
* @return '女性'-女性、'男性'-男性
*/
function MaleOrFemalByIdCard(idCard){
idCard =rim(idCard.replace(/ /g, ""));// ID を処理します番号。文字の間にはスペースを入れてください。
if(idCard.length==15){
if(idCard.substring(14,15)%2==0){
return '女性'
}else{
return '男性';
}
}else if(idCard.length ==18){
if(idCard.substring(14,17)%2==0){
return '女性';
}else{
return 'male';
}
}else{
return null;配列
// if(idCard.length==15){
//alert(idCard[13])
// if(idCard[13]%2==0){
// return '女性';
// }else{
// return '男性';
// }else if(idCard.length==18){
//alert(idCard[16]);
// if(idCard[16]%2==0){
// return '女性' >// }else{
// return '男性'; }
// }else{
// return
// }
}
/**
* 18 桁の ID カード番号の誕生日が有効な誕生日かどうかを確認します
* @param idCard 18 桁の ID カード文字列
* @return
* /
function isValidityBrithBy18IdCard(idCard18){
var year = idCard18.substring(6,10);
var month = idCard18.substring(10,12); ( 12,14);
var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));
// Y2K 問題を回避するには、ここで getFull Year() を使用します。 🎜>if (temp_date.getFullyear()!=parseFloat(年)
||temp_date.getMonth()!=parseFloat(月)-1
||temp_date.getDate()!=parseFloat(日)) {
return false;
}else{
return true;
}
}
/**
* 15 桁の ID カード番号の誕生日が有効な誕生日かどうかを確認します
* @param idCard15 15 桁の ID カード文字列
* @return
*/
function isValidityBrithBy15IdCard(idCard15){
var year = idCard15.substring(6,8);
var month = idCard15.substring(8,10);
var day = idCard15.substring(10,12); (year, parseFloat(month)-1,parseFloat(day));
// 古い ID カードの年齢については、Y2K 問題を考慮して get Year() メソッドを使用する必要はありません
if (temp_date.get Year()! =parseFloat(年)
||temp_date.getMonth()!=parseFloat(月)-1
||temp_date.getDate()!=parseFloat(日)){
return false;
}else{
return true;
}
}
//文字列の先頭と末尾のスペースを削除します
functionrim(str) {
return str.replace(/(^s* )|(s*$)/g,
}
バージョン 2 を更新しました
function checkIdcard( num)
{
num = num.toUpperCase();
//ID 番号は 15 桁または 18 桁の場合、18 桁のうち最初の 17 桁になります。最後の桁はチェックサム ビットで、数値または文字 X です。
if (!(/(^d{15}$)|(^d{17}([0-9]|X)$)/.test(num)))
{
/ /alert('入力されたID番号の長さが間違っているか、番号が規定を満たしていません!
15 桁の数字はすべて数字にする必要があり、18 桁の数字の最後の桁は数字または X にすることができます。 ');
return false;
}
//チェック ディジットは ISO 7064:1983.MOD 11-2 の規定に従って生成され、X は数値 10 と見なされます。
//以下は生年月日とチェックデジットをそれぞれ分析します
var len, re;
len = num.length;
if (len == 15)
{
re = new RegExp(/^(d{6})(d{2})(d{2})(d{2})(d{3})$/); var
var arrSplit = num.match( re );
//誕生日が正しいか確認します
var dtmBirth = new Date('19' arrSplit[2] '/' arrSplit[3] '/' arrSplit[4]);
var bGoodDay;
bGoodDay = (dtmBirth.get Year() == Number(arrSplit[2])) && ((dtmBirth.getMonth() 1) == Number(arrSplit[3])) && (dtmBirth) .getDate( ) == Number(arrSplit[4]));
if (!bGoodDay)
{
//alert('入力された ID 番号の生年月日が間違っています!');
return false ;
}
else
{
//15 桁の ID カードを 18 桁に変換します
// チェック ディジットは ISO 7064 に従って生成されます。 1983.MOD 11-2, X 数字の 10 と考えてください。
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);新しい配列('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); >var nTemp = 0, i;
num = num.substr(0, 6) '19' num.substr(6, num.length - 6); ; i )
{
nTemp = num.substr(i, 1) * arrInt[i];
num = arrCh[nTemp % 11]; >}
}
if (len == 18)
{
re = new RegExp(/^(d{6})(d{4})(d{2})(d {2})(d{3})([0-9]|X)$/);
var arrSplit = num.match(re)
//誕生日が正しいかどうかを確認します。正しい
var dtmBirth = new Date(arrSplit[2] "/" arrSplit[3] "/" arrSplit[4]);
var bGoodDay = (dtmBirth.getFull Year() == 数値(arrSplit [2])) && ((dtmBirth.getMonth() 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); !bGoodDay )
{
//alert(dtmBirth.get Year());
//alert(arrSplit[2]);
//alert('入力されたIDの生年月日番号が間違っています! ');
return false;
}
else
{
//18 桁の ID カードのチェック コードが正しいかどうかを確認します。
//チェック ディジットは ISO 7064:1983.MOD 11-2 に従って生成され、X は数字の 10 と見なされます。
var valnum;
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', ' 2');
var nTemp = 0, i;
for(i = 0; i {
nTemp = num.substr(i, 1) * arrInt[ i];
}
valnum = arrCh[nTemp % 11];
if (valnum != num.substr(17, 1))
{
//alert('18 bit) ID カードの検証コードは正しくありません: ' valnum);
return
}
return }