code128校验位码计算方式:
1,從右到左,從倒數第二位4的偶數位相加
2,將第一步結果乘以3
3,從右到左,由倒數第三位0的奇數位相加
4,第二步結果加上第三步結果
5,用"大於"或"等於" 108(D的結果)且為10的最小整數倍的數減去108(D的結果)
6,校驗碼乘以1
代码
public static Integer getCheckSum(String code) {
if (code == null || code.trim().length() < 3) {
return null;
}
String sortStr = new StringBuffer(code).reverse().toString();
int evenNumber = 0;
int oddNumber = 0;
for (int i = 1; i <= sortStr.length(); i++) {
if (i % 2 == 0) {
//1,從右到左,從倒數第二位4的偶數位相加
char c = sortStr.charAt(i - 1);
String str = String.valueOf(c);
evenNumber = evenNumber + Integer.parseInt(str);
} else if (i >= 3 && i % 2 != 0) {
//3,從右到左,由倒數第三位0的奇數位相加
char c = sortStr.charAt(i - 1);
String str = String.valueOf(c);
oddNumber = oddNumber + Integer.parseInt(str);
}
}
//2,將第一步結果乘以3
evenNumber = evenNumber * 3;
//4,第二步結果加上第三步結果
int sumNumber = evenNumber + oddNumber;
//5,用"大於"或"等於" 108(D的結果)且為10的最小整數倍的數減去108(D的結果)
//6,校驗碼乘以1
// i = i * 1;
return 10 - (sumNumber % 10);
}