Boa tarde,
Eu utilizo esta:
public string PreencheCodBarras()
{
string strSQL;
StdBELista oLista;
string EanInit;
int Cheq;
int digit;
int sum = 0;
//Update check digit EAN13
strSQL = "select replicate('0',12 - len(convert(bigint, max(convert(varchar(12),codbarras)))+1)) + cast((convert(bigint, max(convert(varchar(12),codbarras)))+1) as nvarchar) as barcode from PRI" + BSO.Contexto.CodEmp + "..artigo";
oLista = BSO.Consulta(strSQL);
oLista.Inicio();
EanInit = oLista.Valor("barcode");
for (int i = EanInit.Length; i >= 1; i--)
{
digit = Convert.ToInt32(EanInit.Substring(i - 1, 1));
if (i % 2 == 0)
{
sum += digit * 3;
}
else
{
sum += digit * 1;
}
}
Cheq = (10 - (sum % 10)) % 10;
return $"{EanInit}{Cheq}";
}
Utilização:
public override void AntesDeGravar(ref bool Cancel, ExtensibilityEventArgs e)
{
if (!BSO.Base.Artigos.Existe(Artigo.Artigo))
{
Artigo.CodBarras = PreencheCodBarras();
}
else if (Artigo.CodBarras == "")
{
if (PSO.MensagensDialogos.MostraPerguntaSimples("Artigo não tem código de barras, criar novo? "))
{
Artigo.CodBarras = Core.PreencheCodBarras();
}
}
}
Incrementa ao último existente.