http://hi.baidu.com/tombkeeper - 选录

计算18位身份证号最后一位校验码的脚本

2008-07-27链接

我上周接到个电话,是个四川口音,声音还有点像yuange,上来就说:“XX啊,还记得我嘛?”。接下来就是老一套的诈骗,想必不少人都碰到过,就不多说了。 问题是我的手机号是用XX的身份证号办的,但一直是我在用。全世界只有中国移动那里的资料会认为这个手机号是XX的。也就是说,诈骗犯那里的资料是源自中国移动。 因为在中国,尚无个人隐私相关的法律,所以,别人拿你的信息换钱是绝对安全的;所以,你刚买完车,手机上就能接到卖车险的电话;刚生完孩子,护士就把你的资料卖给倒腾婴儿用品的;办张信用卡,跟着就天天接卖保险的电话。 今天公司组织体检,没想到体检中心要我们填写一份详细的表格。其详细程度足够在任何一家银行以你的身份开户办信用卡。我空着身份证号那一栏没有填,因为以我实在想不出身份证号码对判断我的健康状况有什么用处。但是收卡的护士不依不饶,逼着非填不可。我说没带,她说那你回家打电话告诉我们,我说好,她说那你什么时候打过来?这也忒齁急,忒敬业了。子曰“吾未见有好德如好色者也”,如果你见着了,那就得多个心眼儿。 我当然不可能把身份证号给他们。即便这个体检中心的人都是新长征突击手三八红旗手久经考验的共产党员,绝对不会卖客户资料,那么,从一个体检中心的信息系统里偷客户资料会有多难? 我不想跟他们多费口舌争这番道理。要搁以前,随口报个假号就得了,现在的18位身份证号末一位是CheckSum,大多数系统录入的时候就会检查,没法临时诹。还好,算这个的代码到处都是: function isIdCardNo (num) { var factorArr = new Array ( 7 , 9 , 10 , 5 , 8 , 4 , 2 , 1 , 6 , 3 , 7 , 9 , 10 , 5 , 8 , 4 , 2 , 1 ) ; var error ; var varArray = new Array () ; var intValue ; var lngProduct = 0 ; var intCheckDigit ; var intStrLen = num. length ; var idNumber = num ; if (intStrLen ! = 18 ) { error = "输入身份证号码长度不对!" ; WScript.Echo(error) ; return false ; } for (i = 0 ; i < intStrLen ; i++) { varArray[i] = idNumber. charAt (i) ; if ((varArray[i] < '0' | | varArray[i] > '9' ) & & (i ! = 17 )) { error = "错误的身份证号码!." ; WScript.Echo(error) ; return false ; } else if (i < 17 ) { varArray[i] = varArray[i]*factorArr[i] ; } } for (i = 0 ; i < 17 ; i++) { lngProduct = lngProduct + varArray[i] ; } intCheckDigit = 12 - lngProduct % 11 ; switch (intCheckDigit) { case 10 : intCheckDigit = 'X' ; break ; case 11 : intCheckDigit = 0 ; break ; case 12 : intCheckDigit = 1 ; break ; } if (varArray[ 17 ]. toUpperCase () ! = intCheckDigit) { error = "身份证效验位错误!...正确为: " + intCheckDigit + "." ; WScript.Echo(error) ; return false ; } WScript.Echo ( "Correct." ) ; return true ; } isIdCardNo( "320303197904112024" ) ;