java - 校验位计算改进或优化
问题描述
我现在在开发阶段使用了一个简单的校验位计算器。校验位取决于帐号和常数乘数2187654321
。帐号为字符串格式。我需要将其拆分为整数数组。然后每个整数都需要分别乘以它们的乘数。
假设帐号是 08060002506。所以过程将是2x0 + 1x8 + 8x0...
我的问题是,如果有更多的优化方法来进行计算,有人可以建议吗?因为我将对大约数千个帐号进行计算。
这是我的代码
import java.util.Arrays;
class CheckDigit {
public static void main(String[] args) {
String accountNo = "08060002506";
Integer[] multiplier = new Integer[]{2, 1, 8, 7, 6, 5, 4, 3, 2, 1};
Object[] accountNoArr = convertAccountToIntArray(accountNo);
int sum = getSum(multiplier, accountNoArr);
int remainder = getRemainder(sum);
int checkDigit = 9 - remainder;
System.out.println("Check digit is = " + checkDigit);
}
private static Object[] convertAccountToIntArray(String accountNo) {
return Arrays.stream(accountNo.split(""))
.map(Integer::parseInt).toArray();
}
private static int getSum(Integer[] multiplier, Object[] accountNoArr) {
int sum = 0;
for (int i = 0, multiplierLength = multiplier.length; i < multiplierLength; i++) {
Integer numToMultiply = (Integer) accountNoArr[i];
Integer mul = multiplier[i];
sum += mul * numToMultiply;
}
return sum;
}
private static int getRemainder(int sum) {
return sum % 9;
}
}
解决方案
更喜欢String.charAt(int)
和解析每个子字符串(并使用 an而不是 an )。就像是,Character.digit(char, int)
String.split("")
int[]
Integer[]
public static void main(String[] args) {
String accountNo = "08060002506";
int[] multiplier = {2, 1, 8, 7, 6, 5, 4, 3, 2, 1};
int sum = getSum(multiplier, accountNo);
int remainder = getRemainder(sum);
int checkDigit = 9 - remainder;
System.out.println("Check digit is = " + checkDigit);
}
private static int getSum(int[] multiplier, String accountNo) {
int sum = 0;
for (int i = 0; i < multiplier.length; i++) {
int numToMultiply = Character.digit(accountNo.charAt(i), 10);
sum += multiplier[i] * numToMultiply;
}
return sum;
}
推荐阅读
- java - 我们必须读取一个 xml 文件并将其转换为 csv 文件,然后将其存储在用户提供的路径中
- node.js - 测试是否正在发送正确的数据以供查看
- sql - 转换为范式
- git - 如何通过 git patch 添加新的 git 存储库文件
- python - 我收到一个错误,因为“失败:AttributeError:'ServicePrincipalCredentials'对象没有属性'get_token”
- r - 错误:编织时找不到函数“read_sav”
- c# - 使用 C# 从 Microsoft.GroupPolicy.GPTrustee 获取名称/Sid
- typescript - 使用类名来定义类型中的属性
- sql - 尝试在两个过滤表之间执行 SQL 连接
- node.js - MulterS3 - 检查请求对象的控制流