求:perl下的身份证函数

求:perl下的身份证函数

求:perl下的身份证函数
[CCB]21[/CCB]15位身份证转18位;18位身份证的正确性校验;合理性检察
http://www.auth-info.com.
http://www.auth-info.com/AuthInfo/s_IdcardCN.mpl
这里是我用modperl写的一个身份证验证。

其实关键在于知道身份证的算法
刚刚到 cpan 搜索了 --h.
刚刚到 cpan 搜索了
http://search.cpan.org/~fayland/Business-CN-IdentityCard-0.05/lib/Business/CN/IdentityCard.pm
这个就是
有个java的要么?--以前.
有个java的要么?
以前写的,算法:
15升级到18是,第七位加19,以及最后一位加验证码。

====================================
package util;
import java.lang.*;
/**
* <p>Description:身份证验证以及升级 </p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: xxxx</p>
* @author
* @version 1.0
*/

public class IDCard {


public IDCard() {
}

//verify
public boolean Verify(String idcard) {
if (idcard.length() == 15) {
idcard = uptoeighteen(idcard);
}
if (idcard.length() != 18) {
return false;
}
String verify = idcard.substring(17, 18);
if (verify.equals(getVerify(idcard))) {
return true;
}
return false;
}

//get verify,取最后一位验证码。
public String getVerify(String s18) {
//首先计算得wi[n],由于别人计算出来了,我们只要放到一个数组就可以了

int[] wi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1};

// verify digit
int[] vi = {1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2};
int ai =0;
int remaining = 0;

if (s18.length() == 18) {
s18 = s18.substring(0, 17);
}
//取前17位:核心计算法,累加
if (s18.length() == 17) {

String k ="";
int sum = 0;

for (int i = 0; i < 17; i++) {

k = s18.substring(i, i + 1);
//转化为数字
ai = Integer.parseInt(k);
//累加,记住,不是i * ai,而是 wi[i] * ai
sum = sum + wi[i] * ai;
}
remaining = sum % 11;
}
return remaining == 2 ? "X" : String.valueOf(vi[remaining]);
}

//15 update to 18
public String uptoeighteen(String s15) {
String s18 = s15.substring(0,6);
s18 = s18 + "19";
s18 = s18 + s15.substring(6,15);
s18 = s18 + getVerify(s18);
return s18;
}

public static void main(String[] args) {
/* 身份证升级 */
String Idcard = "441114821114441";
IDCard card = new IDCard();
System.out.println(card.uptoeighteen(Idcard));
//身份证验证(合法性)
Idcard = "44111419821114441X";
if (card.Verify(Idcard)) {
System.out.println("ok ");
} else {
System.out.println("false");
}
//打印最后一位
System.out.println("--"+card.getVerify("44121119821114441X")+"--");
}
}