• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

wmixvideo / nfe / #6669

09 May 2016 12:13PM UTC coverage: 79.328% (-0.04%) from 79.364%
#6669

push

travis-ci

jefperito
Ajustado javadoc para HTML Strict

4651 of 5863 relevant lines covered (79.33%)

50.85 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

90.63
/src/main/java/com/fincatto/nfe310/utils/NFGeraQRCode.java
1
package com.fincatto.nfe310.utils;
2

3
import java.math.BigInteger;
4
import java.security.MessageDigest;
5
import java.security.NoSuchAlgorithmException;
6

7
import org.apache.commons.lang3.StringUtils;
8
import org.joda.time.DateTime;
9

10
import com.fincatto.nfe310.NFeConfig;
11
import com.fincatto.nfe310.classes.NFAmbiente;
12
import com.fincatto.nfe310.classes.nota.NFNota;
13

14
public class NFGeraQRCode {
15

16
        private final NFNota nota;
17
        private final NFeConfig config;
18

19
        public NFGeraQRCode(final NFNota nota, final NFeConfig config) {
1✔
20
                this.nota = nota;
1✔
21
                this.config = config;
1✔
22
        }
1✔
23

24
        public String getQRCode() throws NoSuchAlgorithmException {
25
                final String url = this.config.getAmbiente().equals(NFAmbiente.PRODUCAO) ? this.nota.getInfo().getIdentificacao().getUf().getQrCodeProducao() : this.nota.getInfo().getIdentificacao().getUf().getQrCodeHomologacao();
1✔
26
                if (StringUtils.isBlank(url)) {
1✔
27
                        throw new IllegalArgumentException("URL para consulta do QRCode nao informada para uf " + this.nota.getInfo().getIdentificacao().getUf() + "!");
×
28
                }
29
                if (StringUtils.isBlank(this.config.getCodigoSegurancaContribuinte())) {
1✔
30
                        throw new IllegalArgumentException("CSC nao informado nas configuracoes!");
×
31
                }
32
                if ((this.config.getCodigoSegurancaContribuinteID() == null) || (this.config.getCodigoSegurancaContribuinteID() == 0)) {
1✔
33
                        throw new IllegalArgumentException("IdCSC nao informado nas configuracoes!");
×
34
                }
35

36
                final DateTime dt = this.nota.getInfo().getIdentificacao().getDataHoraEmissao();
1✔
37
                final String dtf = dt.toString("yyyy-MM-dd") + "T" + dt.toString("HH:mm:ssZZ");
1✔
38

39
                final String cpfj = this.nota.getInfo().getDestinatario() == null ? null : this.nota.getInfo().getDestinatario().getCpfj();
1✔
40

41
                //Monta os parametros do qrcode: https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx?chNFe=43160493062776000117650010000012891000012891&nVersao=100&tpAmb=1&cDest=00400437031&dhEmi=323031362d30342d31355431363a32313a35312d30333a3030&vNF=88.00&vICMS=0.00&digVal=787971704e2f7771446134687070486e6b6b6c34705a39536a36633d&cIdToken=000001&cHashQRCode=852E4B5BC4EB9BF65484AEEBB06BE4A65F0E8E13
42
                final StringBuilder parametros = new StringBuilder();
1✔
43
                parametros.append("chNFe=").append(this.nota.getInfo().getChaveAcesso()).append("&"); //Chave de Acesso da NFC-e
1✔
44
                parametros.append("nVersao=100").append("&"); //Versao do QRCode
1✔
45
                parametros.append("tpAmb=").append(this.config.getAmbiente().getCodigo()).append("&");
1✔
46

47
                if (StringUtils.isNotBlank(cpfj)) {
1✔
48
                        parametros.append("cDest=").append(cpfj).append("&");//Documento de Identificacao do Consumidor (CNPJ/CPF/ID Estrangeiro)
1✔
49
                }
50

51
                parametros.append("dhEmi=").append(NFGeraQRCode.toHex(dtf)).append("&");//Data e Hora de Emissão da NFC-e
1✔
52
                parametros.append("vNF=").append(this.nota.getInfo().getTotal().getIcmsTotal().getValorTotalNFe()).append("&"); //Valor Total da NFC-e
1✔
53
                parametros.append("vICMS=").append(this.nota.getInfo().getTotal().getIcmsTotal().getValorTotalICMS()).append("&");//NFC-e Valor Total ICMS na NFC-e
1✔
54
                parametros.append("digVal=").append(NFGeraQRCode.toHex(this.nota.getAssinatura().getSignedInfo().getReference().getDigestValue())).append("&");//Digest Value da NFC-e
1✔
55
                parametros.append("cIdToken=").append(String.format("%06d", this.config.getCodigoSegurancaContribuinteID()));//Identificador do CSC – Codigo de Seguranca do Contribuinte no Banco de Dados da SEFAZ
1✔
56

57
                //retorna a url do qrcode
58
                return url + "?" + parametros.toString() + "&cHashQRCode=" + NFGeraQRCode.createHash(parametros.toString(), this.config.getCodigoSegurancaContribuinte());
1✔
59
        }
60

61
        public static String createHash(final String campos, final String csc) throws NoSuchAlgorithmException {
62
                return NFGeraQRCode.sha1(campos + csc);
1✔
63
        }
64

65
        public static String toHex(final String arg) {
66
                return String.format("%040x", new BigInteger(1, arg.getBytes()));
2✔
67
        }
68

69
        public static String sha1(final String input) throws NoSuchAlgorithmException {
70
                final StringBuilder sb = new StringBuilder();
2✔
71
                for (final byte element : MessageDigest.getInstance("SHA1").digest(input.getBytes())) {
42✔
72
                        sb.append(Integer.toString((element & 0xff) + 0x100, 16).substring(1));
40✔
73
                }
74
                return sb.toString();
2✔
75
        }
76
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc