C# – Calcular dígito verificador do EAN-13

CSharp

EAN-13 (European Article Number) é um código de barras no padrão EAN definido pela GS1, adaptado em mais de cem organizações membros GS1, para a identificação dos código de barras UPC.

No EAN-13 o símbolo codifica treze números que estão divididos em quatro partes. Dos treze dígitos, doze são dos dados referentes ao produto e um é o dígito verificador.

EAN-13
EAN-13

A GS1 possui uma calculadora em seu site disponível em https://www.gs1.org/services/check-digit-calculator.

A ideia é demonstrar como calcular o dígito verificador utilizando C#. Vamos ao código:

public static int Ean13CalculateCheckDigit(string barcode)
{
	int[] array = new int[]
	{
		int.Parse(barcode[0].ToString()),
		int.Parse(barcode[1].ToString()) * 3,
		int.Parse(barcode[2].ToString()),
		int.Parse(barcode[3].ToString()) * 3,
		int.Parse(barcode[4].ToString()),
		int.Parse(barcode[5].ToString()) * 3,
		int.Parse(barcode[6].ToString()),
		int.Parse(barcode[7].ToString()) * 3,
		int.Parse(barcode[8].ToString()),
		int.Parse(barcode[9].ToString())* 3,
		int.Parse(barcode[10].ToString()),
		int.Parse(barcode[11].ToString()) * 3				
	};

	int sum = (array[0] + array[1] + array[2] + array[3] + array[4] + array[5] + array[6] + array[7] + array[8] + array[9] + array[10] + array[11]);

	int checkDigit = (((sum / 10) + 1) * 10) - sum;

	if (checkDigit % 10 == 0) checkDigit = 0;

	return checkDigit;
}

Os passos são simples:

  1. Multiplicam-se os dígitos do código de 12 dígitos por 1 e por 3, em sequência repetitiva de 1 e 3;
  2. Somando o resultado das multiplicações encontra-se o total;
  3. O valor total da soma das multiplicações deve ser dividido por 10;
  4. Transforme o resultado em inteiro, “arredondando” o número para baixo;
  5. Some 1 ao resultado da divisão;
  6. Multiplique o resultado dessa soma por 10;
  7. Subtraia desse resultado o valor da soma inicial das multiplicações;
  8. Se o resultado for um múltiplo de 10, o dígito verificador será 0.

No Wikipedia você pode entender mais sobre o EAN-13.