Perl module to test for correct ie numbers
use Business::BR::IE qw(test_ie canon_ie format_ie random_ie); test_ie('sp', '110.042.490.114') # 1 test_ie('pr', '123.45678-50') # 1 test_ie('ac', '01.004.823/001-12') # 1 test_ie('al', '24.000.004-8') # 1 test_ie('am', '04.117.161-6') # 1 test_ie('ba', '123456-63') # 1 test_ie('ma', '12.000.038-5') # 1 test_ie('mg', '062.307.904/0081') #1 test_ie('rr', '24.006.628-1') # 1 test_ie('ap', '03.012.345-9') # 1
\s-1YET\s0 \s-1TO\s0 \s-1COME\s0. Handles \s-1IE\s0 for the states of Acre (\s-1AC\s0), Alagoas (\s-1AL\s0), Amapa\*' (\s-1AP\s0), Amazonas (\s-1AM\s0), Bahia (\s-1BA\s0), Maranha\*~o (\s-1MA\s0), Minas Gerais (\s-1MG\s0), Parana\*' (\s-1PR\s0), Rondo\*^nia (\s-1RO\s0), Roraima (\s-1RR\s0) and Sao Paulo (\s-1SP\s0) by now.
\*(C`test_ie\*(C' is exported by default. \*(C`canon_ie\*(C', \*(C`format_ie\*(C', \*(C`random_ie\*(C' and \*(C`parse_ie\*(C' can be exported on demand.
Each state has its own rules for \s-1IE\s0 numbers. In this section, we gloss over each one of these
The state of Acre uses:
13-digits number
the last two are check digits
the usual formatting is like '01.004.823/001-12'
if the IE-AC number is decomposed into digits like this a_1 a_2 a_3 a_4 a_5 a_6 a_7 a_8 a_9 a_10 a_11 d_1 d_2 it is correct if a_1 a_2 = 0 1 (that is, it always begin with \*(L"01\*(R") and if it satisfies the check equations: 4 a_1 + 3 a_2 + 2 a_3 + 9 a_4 + 8 a_5 + 7 a_6 + 6 a_7 + 5 a_8 + 4 a_9 + 3 a_10 + 2 a_11 + d_1 = 0 (mod 11) or = 1 (mod 11) (if d_1 = 0)
5 a_1 + 4 a_2 + 3 a_3 + 2 a_4 + 9 a_5 + 8 a_6 + 7 a_7 + 6 a_8 + 5 a_9 + 4 a_10 + 3 a_11 + 2 d_1 + d_2 = 0 (mod 11) or = 1 (mod 11) (if d_2 = 0)
The state of Alagoas uses:
9-digits number
the last one is a check digit
the usual formatting is like '24.000.004-8'
if the IE-AL number is decomposed into digits like this a_1 a_2 a_3 a_4 a_5 a_6 a_7 a_8 d_1 it is correct if it always begin with \*(L"24\*(R" (the code for the state of Alagoas), a_1 a_2 = 2 4 if the following digit identifies a valid company type 0 - "normal" 1 - "normal" 3 - "produtor rural" 5 - "substituta" 6 - "empresa pequeno porte" 7 - "micro empresa ambulante" 8 - "micro empresa" 9 - "especial" and if it satisfies the check equation: ( 9 a_1 + 2 a_2 + 3 a_3 + 4 a_4 + 5 a_5 6 a_6 + 7 a_7 + 8 a_8 ) * 10 - d_1 = 0 (mod 11) or = 10 (mod 11) (if d_1 = 0)
The state of Amazonas uses:
9-digits number
the last one is a check digit
the usual formatting is like '11.111.111-0'
if the IE-AM number is decomposed into digits like this a_1 a_2 a_3 a_4 a_5 a_6 a_7 a_8 d_1 it is correct if it satisfies the check equation: 9 a_1 + 8 a_2 + 7 a_3 + 6 a_4 + 5 a_5 4 a_6 + 3 a_7 + 2 a_8 + d_1 = 0 (mod 11) or = 1 (mod 11) (if d_1 = 0)
The state of Bahia uses:
8-digits number
the last two are check digits
the usual formatting is like '123456-63'
The state of Maranha\*~o uses:
9-digits number
the 9th is a check digit
the usual formatting is like '12.000.038-5'
if the IE-MA number is decomposed into digits like this a_1 a_2 a_3 a_4 a_5 a_6 a_7 a_8 d_1 it is correct if it always begin with \*(L"12\*(R" (the code for the state of Maranha\*~o), a_1 a_2 = 1 2 and if it satisfies the check equation: ( 9 a_1 + 8 a_2 + 7 a_3 + 6 a_4 + 5 a_5 4 a_6 + 3 a_7 + 2 a_8 ) - d_1 = 0 (mod 11) or = 10 (mod 11) (if d_1 = 0)
The state of Minas Gerais uses:
13-digits number
the 11th and 12th are check digits
the usual formatting is like '062.307.904/0081'
to determine if \s-1IE/MG\s0 number is correct, the computation rules in http://www.sintegra.gov.br/Cad_Estados/cad_MG.html must be followed. (Yes, they are boring and hard to describe.)
The state of Parana\*' uses:
10-digits number
the 9th and 10th are check digits
the usual formatting is like '123.45678-50'
The state of Rondo\*^nia uses:
14-digits number
the 14th is a check digit
the usual formatting is like '0000000062521-3'
if the IE-RO number is decomposed into digits like this a_1 a_2 a_3 a_4 a_5 a_6 a_7 a_8 a_9 a_10 a_11 a_12 a_13 d_1 it is correct if it satisfies the check equation: ( 6 a_1 + 5 a_2 + 4 a_3 + 3 a_4 + 2 a_5 + 9 a_6 + 8 a_7 + 7 a_8 + 6 a_9 + 5 a_10 + 4 a_11 + 3 a_12 + 2 a_13 + d_1 = 0 (mod 11) or = 1 (mod 11) if d_1 = 0
The state of Roraima uses:
9-digits number
the 9th is a check digit
the usual formatting is like '24.006.628-1'
if the IE-RR number is decomposed into digits like this a_1 a_2 a_3 a_4 a_5 a_6 a_7 a_8 d_1 it is correct if it always begin with \*(L"24\*(R" (the code for the state of Roraima), a_1 a_2 = 2 4 and if it satisfies the check equation: ( 1 a_1 + 2 a_2 + 3 a_3 + 4 a_4 + 5 a_5 6 a_6 + 7 a_7 + 8 a_8 ) - d_1 = 0 (mod 9)
The state of Sa\*~o Paulo uses:
12-digits number
the 9th and 12nd are check digits
the usual formatting is like '110.042.490.114'
This documentation is faulty
If you want handling more than \s-1AC\s0, \s-1AL\s0, \s-1AM\s0, \s-1MA\s0, \s-1MG\s0, \s-1PR\s0, \s-1RO\s0, \s-1RO\s0 and \s-1SP\s0, you'll have to wait for the next releases
The handling of IE-SP does not include yet the special rule for testing correctness of registrations of rural producers.
the case of unfair digits must be handled satisfactorily (in this and other Business::BR::Ids modules)
Please reports bugs via \s-1CPAN\s0 \s-1RT\s0, http://rt.cpan.org/NoAuth/Bugs.html?Dist=Business-BR-Ids By doing so, the author will receive your reports and patches, as well as the problem and solutions will be documented.
A. R. Ferreira, <[email protected]>
Copyright (C) 2005-2007 by A. R. Ferreira
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.