校验码介绍:
Label Painter 校验码针对所属数据对象产生一位校验码并附加其后,便于号码真伪验证工作的进行。校验码字符集合可定义,校验因子可设置。最大限度提高号码的安全性,防止号码伪造。
校验码程式说明:
如图:校验位允许使用者自定义"字符集"和"因子"。使用者填写的"字符集"和"因子"需谨记,用于日后号码校验。
Label Painter校验码算法如下:
/*
*校验位算法
*@stringBuilder:待校验数据
*/
public void addVerifyChar(StringBuilder stringBuilder) {
char pszSrc[] = stringToASCII(stringBuilder.toString()).toCharArray(); //取ASII码值,stringToASCII方法见后
char szVerCode[] = m_verifyStr.toCharArray(); //m_verifyStr:字符集
char baseCode[] = m_verifyBaseStr.toCharArray(); //m_verifyBaseStr:因子
int iS = 0;
for (int i = 0; i < pszSrc.length; i++) {
iS += (int) ((pszSrc[i] - '0') * baseCode[i % baseCode.length]);
}
stringBuilder.append(szVerCode[iS % szVerCode.length]); //计算出的校验码附于数据后
}
/**
* 将String类型变量转换为ASCII码 1、如果ASCII为73<i>、79[O],跳过
* 2、只转换'0-9'和'A-Z'(除'I'、'O')的ASCII码,对应的ASCII码为'48-57'和'65-90'(除'73'、'79')
*
* @ transParam:待转换的字符串
* @return 转换后的ASCII码
*/
public static String stringToASCII(String transParam) {
// 不满足要求,直接返回null
if (transParam == null || transParam.length() == 0) {
return null;
}
char[] transChars = transParam.toCharArray();
String ascii = "";
// 字符转换为数字,并拼接为ASCII码
int charASCII = -1;
for (int i = 0; i < transChars.length; i++) {
charASCII = (int) transChars[i];
// 如果为73(I)、79(O),自增
if (charASCII == 73 || charASCII == 79) {
charASCII++;
}
ascii += charASCII;
}
return ascii;
}
官方网址:www.ew8.cn