Função para gerar Chave de Acesso NF-e
Código-Fonte, Delphi abril 3rd, 2008
Segue código fonte da função que escrevi em Delphi para gerar a chave de acesso da NF-e. Já atualizada conforme última versão definida na “Nota Técnica 2007/008”; repare que no Manual de Integração de 2008 a as instruções para gerar a chave de acesso estão desatualizadas, ou seja, por incrível que pareça a Nota divulgada em 2007 é mais recente que a informação do manual divulgado em 2008 e por ai vai….; mas, vamos ao que interessa.
Para construir a chave de acesso usamos as quatro funções listadas a seguir: MontaChaveAcessoNFe (função que recebe os parâmetros da nota e devolve a chave de acesso da NF-e), LimpaCNPJ (função complementar que retira os “traços”, “pontos” e “barra” do CNPJ, se houver), StrZero (que preenche com zeros à esquerda os campos numéricos) e por último a função que faz o calculo do digito verificador da chave (Modulo11).
//MontaChaveAcesso // (codigo alterado em 19/11/08 para compor a chave no formato da versão 1.10 do laioute) //------------------- //Parametros: //codUF - codigo da Unidade e Federação do Município de acordo tabela IBGE. //dtEmissaso - data de emissão da nota fiscal //CNPJ - codigo CNPJ do emitente //Modelo - Modelo da Nota Fiscal NF-e (55) //Serie - codigo de serie da NFe //NumeroNF - Número da Nota Fiscal //Result = Chave de acesso // Function MontaChaveAcessoNFe_v110( codUF: integer; dtEmissao: TDateTime; CNPJ:string; Modelo, Serie, NumeroNF: integer): string; var emissao:string[10]; chave:string; CodigoNumerico: Integer; begin emissao := formatdatetime('DD/MM/YY', dtEmissao); // Essa parte do código gera o Código Numérico (Aleatório) //para que funcione inclua a unit "Math" na cláusule Uses. Randomize; CodigoNumerico := Random(99999999); chave := IntToStr(codUF)+copy( emissao, 7,2)+copy(emissao,4,2)+ LimpaCNPJ(CNPJ)+StrZero(Modelo,2,0)+StrZero(Serie,3,0)+ StrZero(NumeroNF,9,0)+StrZero(CodigoNumerico,9,0); Result := chave + Modulo11(chave); end; // LimpaCNPJ (retira máscaras do CNPJ) //------------------------------------ Function LimpaCNPJ( cnpj: string): string; begin Result := StringReplace(StringReplace(StringReplace( cnpj, '.','',[rfReplaceAll]), '-','',[rfReplaceAll]), '/','',[rfReplaceAll]); end; // StrZero (Preenche com zeros à esquerda) // ------------------------------------------------------ Function StrZero(Num : Real; Zeros, Deci: Integer): string; var tam,z : integer; res,zer : string; begin str(Num:Zeros:Deci, res); res := Alltrim(res); tam := length(res); zer := ''; for z := 1 to (Zeros-tam) do zer := zer + '0'; result := zer+res end; // Alltrim -------------------------- Function Alltrim(Text: string) : string; begin while Pos(' ', Text) > 0 do Delete( Text, pos(' ', text), 1); Result := Text; End; |
Com isso menos uma etapa para ser cumprida.
Até a próxima!
Tags: Chave de Acesso, Delphi, NF-e