Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package nfe.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;  
 
/**
*
* @author Samuel Oliveira
*/
 
public class NFCeUtil {  
 
    private static String cHashQRCode;  
 
    /**
     *
     * Funcao Responsavel por Devolver o QrCode já no padrão da Nota.
     *
     * @param chave : Chave de Acesso da NFCe
     * @param versao: Versão do QR Code. Atual : "100"
     * @param ambiente : Identificação do Ambiente (1 – Produção, 2 – Homologação)
     * @param cpfCnpj : Documento de Identificação do Consumidor (CNPJ/CPF)
     * @param dhEmi : Data e Hora de Emissão da NFC-e Ex: 2016-10-06T10:55:33-03:00
     * @param valorNF : Valor Total da NFC-e
     * @param valorICMS : Valor Total ICMS na NFC-e
     * @param digVal : Digest Value da NFC-e
     * @param idToken : Identificador do CSC – Código de Segurança do Contribuinte no Banco de Dados da SEFAZ
     * @param CSC : Código de Segurança do Contribuinte (antigo Token)
     * @param urlConsulta : Url De Consulta da Nfc-e do Estado
     *
     * @return String do QrCode
     */
 
    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) {  
       
        StringBuilder value = new StringBuilder();  
        value.append("chNFe=").append(chave);  
        value.append("&nVersao=").append(versao);  
        value.append("&tpAmb=").append(ambiente);  
        value.append((cpfCnpj == null | "".equals(cpfCnpj)) ? "" : "&cDest=" + cpfCnpj);  
        value.append("&dhEmi=").append(getHexa(dhEmi));  
        value.append("&vNF=").append(valorNF);  
        value.append("&vICMS=").append(valorICMS);  
        value.append("&digVal=").append(getHexa(digVal));  
        value.append("&cIdToken=").append(idToken);  
        cHashQRCode = getHexa(getHash(value.toString() + CSC, "SHA-1")).toUpperCase();  
 
        StringBuilder ret = new StringBuilder();  
        ret.append(urlConsulta).append("?");  
        ret.append(value);  
        ret.append("&cHashQRCode=").append(cHashQRCode);  
        return ret.toString();  
    }  
 
 
    /**
     * @param valor
     * @param algoritmo "SHA-256", "SHA-1", "MD5"
     * @return
     */
 
    private static byte[] getHash(String valor, String algoritmo) {  
        try {  
            MessageDigest md = MessageDigest.getInstance(algoritmo);  
            md.update(valor.getBytes());  
            return md.digest();  
        } catch (NoSuchAlgorithmException e) {  
            return null;  
        }  
    }  
 
    private static String getHexa(String valor) {  
        return getHexa(valor.getBytes());  
    }  
 
    private static String getHexa(byte[] bytes) {  
        StringBuilder s = new StringBuilder();  
        for (int i = 0; i < bytes.length; i++) {  
            int parteAlta = ((bytes[i] >> 4) & 0xf) << 4;  
            int parteBaixa = bytes[i] & 0xf;  
            if (parteAlta == 0) {  
                s.append('0');  
            }  
            s.append(Integer.toHexString(parteAlta | parteBaixa));  
        }  
        return s.toString();  
    }  

}