校验码API

EW8 LabelPrint

校验码API

校验码介绍:

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;
}