Пример расчета EAN13 на C#
Для начала о самой процедуре:
Вся суть генерации штрихового кода EAN-13 заключается в поиске контрольного разряда (последней 13-ой цифры).
Алгоритм поиска этого значения таков:
1) Оставляем 12 цифр (последняя 13 - контрольная которую ищем).
2) Суммируем разряды, стоящие на четных местах.
3) Результат пункта 2 умножаем на 3 .
4) Суммируем разряды, стоящие на нечетных местах.
5) Суммируем результаты пунктов 3 и 4.
6) В полученном числе крайнюю справа цифру (остаток от деления на 10) вычесть из 10, если остаток 0 то значение равно 0.
Полученный результат и есть значение контрольной цифры.
Теперь пример на класса реализующего этот алгоритм на C#:
class MakeBARCODE
{
public static string MakeEAN13(long prefix, long code)
{
//В случае если префикс или код слишком большие то будет выдана ошибка:
string result = "ERROR_TOOLONG";
if ((prefix < 100) && (code < 10000000000))
{
//Получаем строку символов (цифр).
long all_code = prefix * 100000000000 + code;
string nabor = all_code.ToString();
//Сумма по чётным позициям.
int count_chet = int.Parse(nabor[1].ToString()) + int.Parse(nabor[3].ToString()) + int.Parse(nabor[5].ToString()) + int.Parse(nabor[7].ToString()) + int.Parse(nabor[9].ToString()) + int.Parse(nabor[11].ToString());
//Сумма по нечётным позициям.
int count_nechet = int.Parse(nabor[0].ToString()) + int.Parse(nabor[2].ToString()) + int.Parse(nabor[4].ToString()) + int.Parse(nabor[6].ToString()) + int.Parse(nabor[8].ToString()) + int.Parse(nabor[10].ToString());
//Контрольная сумма и контрольный разряд.
int control_summ = count_chet * 3 + count_nechet;
int ostatok = control_summ % 10;
if (!(ostatok == 0))
{
ostatok = 10 - ostatok;
}
result = nabor + ostatok.ToString();
}
return result;
}
}
Функция MakeEAN13 получает два параметра двухзначный префикс штрих-кода, и число (номер штрих-кода) из этих составляющих собирается штриховой код с контрольным разрядом и возвращается в виде строковой переменной.