Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 espaco 1
package nfe.util;
2
 
3
import java.security.MessageDigest;
4
import java.security.NoSuchAlgorithmException;  
5
 
6
/**
7
*
8
* @author Samuel Oliveira
9
*/  
10
public class NFCeUtil {  
11
 
12
    private static String cHashQRCode;  
13
 
14
    /**
15
     *
16
     * Funcao Responsavel por Devolver o QrCode já no padrão da Nota.
17
     *
18
     * @param chave : Chave de Acesso da NFCe
19
     * @param versao: Versão do QR Code. Atual : "100"
20
     * @param ambiente : Identificação do Ambiente (1 – Produção, 2 – Homologação)
21
     * @param cpfCnpj : Documento de Identificação do Consumidor (CNPJ/CPF)
22
     * @param dhEmi : Data e Hora de Emissão da NFC-e Ex: 2016-10-06T10:55:33-03:00
23
     * @param valorNF : Valor Total da NFC-e
24
     * @param valorICMS : Valor Total ICMS na NFC-e
25
     * @param digVal : Digest Value da NFC-e
26
     * @param idToken : Identificador do CSC – Código de Segurança do Contribuinte no Banco de Dados da SEFAZ
27
     * @param CSC : Código de Segurança do Contribuinte (antigo Token)
28
     * @param urlConsulta : Url De Consulta da Nfc-e do Estado
29
     *
30
     * @return String do QrCode
31
     */  
32
    public static String getCodeQRCode(String chave, String versao, String ambiente, String cpfCnpj, String dhEmi, String valorNF, String valorICMS, String digVal, String idToken, String CSC, String urlConsulta) {  
33
 
34
        StringBuilder value = new StringBuilder();  
35
        value.append("chNFe=").append(chave);  
36
        value.append("&nVersao=").append(versao);  
37
        value.append("&tpAmb=").append(ambiente);  
38
        value.append((cpfCnpj == null | "".equals(cpfCnpj)) ? "" : "&cDest=" + cpfCnpj);  
39
        value.append("&dhEmi=").append(getHexa(dhEmi));  
40
        value.append("&vNF=").append(valorNF);  
41
        value.append("&vICMS=").append(valorICMS);  
42
        value.append("&digVal=").append(getHexa(digVal));  
43
        value.append("&cIdToken=").append(idToken);  
44
        cHashQRCode = getHexa(getHash(value.toString() + CSC, "SHA-1")).toUpperCase();  
45
 
46
        StringBuilder ret = new StringBuilder();  
47
        ret.append(urlConsulta).append("?");  
48
        ret.append(value);  
49
        ret.append("&cHashQRCode=").append(cHashQRCode);  
50
        return ret.toString();  
51
    }  
52
 
53
 
54
    /**
55
     * @param valor
56
     * @param algoritmo "SHA-256", "SHA-1", "MD5"
57
     * @return
58
     */  
59
    private static byte[] getHash(String valor, String algoritmo) {  
60
        try {  
61
            MessageDigest md = MessageDigest.getInstance(algoritmo);  
62
            md.update(valor.getBytes());  
63
            return md.digest();  
64
        } catch (NoSuchAlgorithmException e) {  
65
            return null;  
66
        }  
67
    }  
68
 
69
    private static String getHexa(String valor) {  
70
        return getHexa(valor.getBytes());  
71
    }  
72
 
73
    private static String getHexa(byte[] bytes) {  
74
        StringBuilder s = new StringBuilder();  
75
        for (int i = 0; i < bytes.length; i++) {  
76
            int parteAlta = ((bytes[i] >> 4) & 0xf) << 4;  
77
            int parteBaixa = bytes[i] & 0xf;  
78
            if (parteAlta == 0) {  
79
                s.append('0');  
80
            }  
81
            s.append(Integer.toHexString(parteAlta | parteBaixa));  
82
        }  
83
        return s.toString();  
84
    }  
85
 
86
}  
87