У меня была аналогичная проблема, и google привел меня на эту страницу. Мне нужно было вычислить контрольную цифру для большого количества штрих-кодов для программы генерации меток. Сначала я начал с вариации ответа Лучано Карвалью выше, но мне было немного любопытно, что кастинг строки привязан к int. Я подозревал, что могу немного улучшить производительность.
Обратите внимание, что проверка выполняется за пределами этой функции. Эта функция больше построена для скорости, так как я генерирую большое количество штрих-кодов.
int CalculateCheckDigit(ulong label)
{
int sum = 0;
bool isEven=true;
while(label>0)
{
if(isEven)
sum += (int)(label % 10) * 3;
else
sum += (int)(label % 10) * 1;
isEven = !isEven;
label /= 10;
}
return (10 - (sum % 10)) % 10;
}