Boa tarde!
Nos fontes do acbr na validação do número da DI hoje está:
function ValidaDIDSI(AValue: String): Boolean;
var
ano: integer;
sValue: String;
begin
// AValue = TAANNNNNNND
// Onde: T Identifica o tipo de documento ( 2 = DI e 4 = DSI )
// AA Ano corrente da geração do documento
// NNNNNNN Número sequencial dentro do Ano ( 7 ou 8 dígitos )
// D Dígito Verificador, Módulo 11, Pesos de 2 a 9
AValue := OnlyNumber(AValue);
ano := StrToInt(Copy(IntToStr(YearOf(Date)), 3, 2));
if (length(AValue) < 11) or (length(AValue) > 12) then
Result := False
else if (copy(Avalue, 1, 1) <> '2') and (copy(Avalue, 1, 1) <> '4') then
Result := False
else if not ((StrToInt(copy(Avalue, 2, 2)) >= ano - 1) and
(StrToInt(copy(Avalue, 2, 2)) <= ano + 1)) then
Result := False
else
begin
sValue := copy(AValue, 1, length(AValue) - 1);
Result := copy(AValue, length(AValue), 1) = Modulo11(sValue);
end;
end;
O problema é que a linha:
AValue := OnlyNumber(AValue);
vai deixar somente os números e meu cliente tem uma DI = 17/1597985-0 e assim deixando apenas os números ficamos com 1715979850 e com 10 dígitos e por isso não passa pela validação:
if (length(AValue) < 11) or (length(AValue) > 12) then
Result := False
e tambem a linha:
else if (copy(Avalue, 1, 1) <> '2') and (copy(Avalue, 1, 1) <> '4') then
Result := False
acredito que não passaria pois a DI inicia com 1.
Este processo de DI é novo para nós, será que alguém poderia por favor nos orientar sobre estas dúvidas?
Desde já agradecemos a atenção!