fabiobarreto10 4/11/2012, 21:02
Criquio achei este código na internet, mas está em Csharp, como converto para vba?
private string modulo10(string str)
{
int digito=0;
int flag=2;
str=str.Substring(0,str.Length - 1);
for (int i = str.Length-1; i >= 0; i--)
{
int valor = Convert.ToInt32(str[i].ToString()) * flag;
int soma = 0;
if (valor.ToString().Length > 1)
{
string svalor = valor.ToString();
for (int j = 0; j < svalor.Length; j++)
{
soma += Convert.ToInt32(svalor[j].ToString());
}
}
else
{
soma = valor;
}
digito += soma;
flag = (flag == 2) ? 1 : 2;
}
digito = digito % 10;
digito = 10 - digito;
if (digito == 10)
{
digito = 0;
}
return digito.ToString();
}
Versão otimizada:
public static int Mod10(this string str)
{
int i = 2;
int sum = 0;
foreach (char c in str.ToCharArray())
{
int res = Convert.ToInt32(c.ToString()) * i;
sum += res > 9 ? (res - 10) + 1 : res;
i = i == 2 ? 1 : 2;
}
return 10 - (sum % 10);
}