Моей цель состоит в том, чтобы реализовать (простой) контрольную цифру 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