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.

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:
- 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;
- Somando o resultado das multiplicações encontra-se o total;
- O valor total da soma das multiplicações deve ser dividido por 10;
- Transforme o resultado em inteiro, “arredondando” o número para baixo;
- Some 1 ao resultado da divisão;
- Multiplique o resultado dessa soma por 10;
- Subtraia desse resultado o valor da soma inicial das multiplicações;
- 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.