我的目标是实现一个(简单)校验位alglorithm描述Here解决模式编程
我implemantion在下面,但我不知道这是否是最优的:
private int CheckDigit(string SevenDecimal)
{
///Get UPC check digit of a 7-digit URI
///Add odd and multiply by 3 =Odds
///Add even =Evens
///Add Odds+Evens=sum
///Check digit is the number that makes Sum divisble by 10
int Odds = 0;
int Evens = 0;
int sum = 0;
int index = 0;
foreach (char digit in SevenDecimal)
{
index++;
int Digit = int.Parse(digit.ToString());
if (index % 2 == 0)
{
Evens +=Digit;
}
else
{
Odds +=Digit;
}
}
Odds = Odds * 3;
sum = Odds + Evens;
for (int i = 0; i < 10; i++) ///Brute force way check for better implementation
{
int Localsum;
Localsum = sum + i;
if (Localsum % 10 == 0)
{
return i;
}
}
return -1;//error;
}
我的主关注在最后的循环中,正如我描述的那样完全是蛮横的。 有没有更好的方法来获取校验码?
更准确地说这是编程解决的最好方法,公式:
(sum+x)%10=0 //solve for x
是不是:10 - (x%10)? – DaniCE 2014-12-04 11:20:24