Due to the extremely fast response speed, it is certain that the accuracy is not verified online. This means that in addition to the well-known rules for indicating birthday and gender, the second-generation ID card also has other self-verification rules. So I opened the source code of the page and found that this js was not compressed, so the rules were easy to understand.
Just here to popularize the science for everyone, I don’t know if it is Mars, haha.
The following code comes from here, and the copyright belongs to Shanda. Of course, you can also find a more detailed introduction and algorithm in Wikipedia.
iW = new Array(7,9,10,5 ,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
iSum = 0;
for( i=0;i<17; i ){
iC = v_card.charAt(i);
iVal = parseInt(iC);
iSum = iVal * iW[i];
}
iJYM = iSum % 11;
var sJYM = '';
if(iJYM == 0) sJYM = "1";
else if(iJYM == 1) sJYM = "0";
else if(iJYM = = 2) sJYM = "x";
else if(iJYM == 3) sJYM = "9";
else if(iJYM == 4) sJYM = "8";
else if(iJYM == 5) sJYM = "7";
else if(iJYM == 6) sJYM = "6";
else if(iJYM == 7) sJYM = "5";
else if( iJYM == 8) sJYM = "4";
else if(iJYM == 9) sJYM = "3";
else if(iJYM == 10) sJYM = "2";
var cCheck = v_card.charAt(17).toLowerCase();
if( cCheck != sJYM ){
return false; //If it doesn’t match, it’s a fake number
}