@@ -55,7 +55,16 @@ public class ChaveFiscal
5555 /// <param name="tipoEmissao">Tipo de emissão do DF-e. Informar inteiro conforme consta no manual de orientação do contribuinte para o DF-e</param>
5656 /// <param name="cNf">Código numérico que compõe a Chave de Acesso. Número gerado pelo emitente para cada DF-e</param>
5757 /// <returns>Retorna um objeto <see cref="DadosChaveFiscal"/> com os dados da chave de acesso</returns>
58- public static DadosChaveFiscal ObterChave ( Estado ufEmitente , DateTimeOffset dataEmissao , string cnpjEmitente , ModeloDocumento modelo , int serie , long numero , int tipoEmissao , int cNf )
58+ public static DadosChaveFiscal ObterChave (
59+ Estado ufEmitente ,
60+ DateTimeOffset dataEmissao ,
61+ string cnpjEmitente ,
62+ ModeloDocumento modelo ,
63+ int serie ,
64+ long numero ,
65+ int tipoEmissao ,
66+ int cNf
67+ )
5968 {
6069 var chave = new StringBuilder ( ) ;
6170
@@ -64,14 +73,15 @@ public static DadosChaveFiscal ObterChave(Estado ufEmitente, DateTimeOffset data
6473 cnpjEmitente = cnpjEmitente . PadLeft ( 14 , '0' ) ;
6574 }
6675
67- chave . Append ( ( ( int ) ufEmitente ) . ToString ( "D2" ) )
68- . Append ( dataEmissao . ToString ( "yyMM" ) )
69- . Append ( cnpjEmitente )
70- . Append ( ( ( int ) modelo ) . ToString ( "D2" ) )
71- . Append ( serie . ToString ( "D3" ) )
72- . Append ( numero . ToString ( "D9" ) )
73- . Append ( tipoEmissao . ToString ( ) )
74- . Append ( cNf . ToString ( "D8" ) ) ;
76+ chave
77+ . Append ( ( ( int ) ufEmitente ) . ToString ( "D2" ) )
78+ . Append ( dataEmissao . ToString ( "yyMM" ) )
79+ . Append ( cnpjEmitente )
80+ . Append ( ( ( int ) modelo ) . ToString ( "D2" ) )
81+ . Append ( serie . ToString ( "D3" ) )
82+ . Append ( numero . ToString ( "D9" ) )
83+ . Append ( tipoEmissao . ToString ( ) )
84+ . Append ( cNf . ToString ( "D8" ) ) ;
7585
7686 var digitoVerificador = ObterDigitoVerificador ( chave . ToString ( ) ) ;
7787
@@ -95,8 +105,8 @@ private static string ObterDigitoVerificador(string chave)
95105 //percorrendo cada caractere da chave da direita para esquerda para fazer os cálculos com o peso
96106 for ( var i = chave . Length - 1 ; i != - 1 ; i -- )
97107 {
98- var ch = Convert . ToInt32 ( chave [ i ] . ToString ( ) ) ;
99- soma += ch * peso ;
108+ var valorCaractere = ObterValorDoCaractere ( chave [ i ] ) ;
109+ soma += valorCaractere * peso ;
100110 //sempre que for 9 voltamos o peso a 2
101111 if ( peso < 9 )
102112 peso += 1 ;
@@ -105,7 +115,7 @@ private static string ObterDigitoVerificador(string chave)
105115 }
106116
107117 //Agora que tenho a soma vamos pegar o resto da divisão por 11
108- mod = soma % 11 ;
118+ mod = soma % 11 ;
109119 //Aqui temos uma regrinha, se o resto da divisão for 0 ou 1 então o dv vai ser 0
110120 if ( mod == 0 || mod == 1 )
111121 dv = 0 ;
@@ -115,6 +125,18 @@ private static string ObterDigitoVerificador(string chave)
115125 return dv . ToString ( ) ;
116126 }
117127
128+ /// <summary>
129+ /// Obtem o valor de um caractere
130+ /// </summary>
131+ /// <param name="caractere"></param>
132+ /// <returns></returns>
133+ private static int ObterValorDoCaractere ( char caractere )
134+ {
135+ const int zeroASCII = 48 ;
136+ var valor = caractere - zeroASCII ;
137+ return valor ;
138+ }
139+
118140 /// <summary>
119141 /// Informa se a chave de um DF-e é válida
120142 /// </summary>
@@ -140,7 +162,16 @@ public static bool ChaveValida(string chaveNfe)
140162 var codigoNumerico = int . Parse ( chaveNfe . Substring ( 35 , 8 ) ) ;
141163 var digitoVerificador = chaveNfe . Substring ( 43 , 1 ) ;
142164
143- var gerarChave = ObterChave ( codigo , anoEMesData , cnpj , modelo , serie , numeroNfe , formaEmissao , codigoNumerico ) ;
165+ var gerarChave = ObterChave (
166+ codigo ,
167+ anoEMesData ,
168+ cnpj ,
169+ modelo ,
170+ serie ,
171+ numeroNfe ,
172+ formaEmissao ,
173+ codigoNumerico
174+ ) ;
144175
145176 return digitoVerificador . Equals ( gerarChave . DigitoVerificador . ToString ( ) ) ;
146177 }
@@ -167,4 +198,4 @@ public DadosChaveFiscal(string chave, byte digitoVerificador)
167198 /// </summary>
168199 public byte DigitoVerificador { get ; private set ; }
169200 }
170- }
201+ }
0 commit comments