Skip to content

Commit eefc953

Browse files
authored
Merge pull request #102 from victorers1/feat/cnpj-basico
Adiciona `obterCnpjInscricao`, `obterCnpjOrdem` e `obterCnpjDiv`
2 parents 41a8f47 + 0d230d8 commit eefc953

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

lib/src/util/util_brasil_fields.dart

+31
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,37 @@ class UtilBrasilFields {
108108
return CNPJValidator.format(cnpj);
109109
}
110110

111+
/// Retorna os dígitos da inscrição do [cnpj] informado.
112+
///
113+
/// Formatado ou não formatado, baseado no parâmetro `useFormat`:
114+
///
115+
/// `true`: inscrição terá o formato `XX.YYY.ZZZ`
116+
///
117+
/// `false`: inscrição terá o formato `XXYYYZZZ`
118+
static String obterCnpjInscricao(String cnpj, {bool useFormat = false}) {
119+
assert(isCNPJValido(cnpj), 'CNPJ inválido!');
120+
return useFormat
121+
? CNPJValidator.format(cnpj).substring(0, 10)
122+
: CNPJValidator.strip(cnpj).substring(0, 8);
123+
}
124+
125+
/// Retorna os dígitos da ordem do [cnpj] informado.
126+
///
127+
/// A ordem do CNPJ são os 4 dígitos após a barra. Essa parte representa se o
128+
/// estabelecimento é matriz ou filial (0001 = matriz, 0002 = filial).
129+
static String obterCnpjOrdem(String cnpj) {
130+
assert(isCNPJValido(cnpj), 'CNPJ inválido!');
131+
return CNPJValidator.strip(cnpj).substring(8, 12);
132+
}
133+
134+
/// Retorna os dígitos verificadores do [cnpj] informado.
135+
///
136+
/// Os dígitos verificadores são os dois últimos números do CNPJ.
137+
static String obterCnpjDiv(String cnpj) {
138+
assert(isCNPJValido(cnpj), 'CNPJ inválido!');
139+
return CNPJValidator.strip(cnpj).substring(12);
140+
}
141+
111142
/// Retorna o número real informado, utilizando a máscara: `R$ 50.000,00` ou `50.000,00`
112143
static String obterReal(double value, {bool moeda = true, int decimal = 2}) {
113144
bool isNegative = false;

test/util_brasil_fields_test.dart

+29
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,35 @@ void main() {
234234
expect(UtilBrasilFields.obterCnpj(cpnjSemMascara), cpnjComMascara);
235235
});
236236

237+
test('Obter inscrição CNPJ', () {
238+
const cpnjSemMascara = '34318733000190';
239+
const cpnjComMascara = '34.318.733/0001-90';
240+
expect(UtilBrasilFields.obterCnpjInscricao(cpnjSemMascara), '34318733');
241+
expect(UtilBrasilFields.obterCnpjInscricao(cpnjComMascara), '34318733');
242+
expect(
243+
UtilBrasilFields.obterCnpjInscricao(cpnjSemMascara, useFormat: true),
244+
'34.318.733',
245+
);
246+
expect(
247+
UtilBrasilFields.obterCnpjInscricao(cpnjComMascara, useFormat: true),
248+
'34.318.733',
249+
);
250+
});
251+
252+
test('Obter Ordem do CNPJ', () {
253+
const cpnjSemMascara = '34318733000190';
254+
const cpnjComMascara = '34.318.733/0001-90';
255+
expect(UtilBrasilFields.obterCnpjOrdem(cpnjSemMascara), '0001');
256+
expect(UtilBrasilFields.obterCnpjOrdem(cpnjComMascara), '0001');
257+
});
258+
259+
test('Obter dígitos verificadores do CNPJ', () {
260+
const cpnjSemMascara = '34318733000190';
261+
const cpnjComMascara = '34.318.733/0001-90';
262+
expect(UtilBrasilFields.obterCnpjDiv(cpnjSemMascara), '90');
263+
expect(UtilBrasilFields.obterCnpjDiv(cpnjComMascara), '90');
264+
});
265+
237266
group('Obter Real', () {
238267
test('com moeda (R\$)', () {
239268
const real = 85437107.04;

0 commit comments

Comments
 (0)