SYNOPSIS
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.4567850') # 1
test_ie('ac', '01.004.823/00112') # 1
test_ie('al', '24.000.0048') # 1
test_ie('am', '04.117.1616') # 1
test_ie('ba', '12345663') # 1
test_ie('ma', '12.000.0385') # 1
test_ie('mg', '062.307.904/0081') #1
test_ie('rr', '24.006.6281') # 1
test_ie('ap', '03.012.3459') # 1
DESCRIPTION
YET TO COME. Handles IE for the states of Acre (AC), Alagoas (AL), Amapa (AP), Amazonas (AM), Bahia (BA), Maranha~o (MA), Minas Gerais (MG), Parana (PR), Rondonia (RO), Roraima (RR) and Sao Paulo (SP) by now.EXPORT
"test_ie" is exported by default. "canon_ie", "format_ie", "random_ie" and "parse_ie" can be exported on demand.DETAILS
Each state has its own rules for IE numbers. In this section, we gloss over each one of theseAC
The state of Acre uses: 13digits number
 the last two are check digits
 the usual formatting is like '01.004.823/00112'

if the IEAC 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 ``01'') 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)
AL
The state of Alagoas uses: 9digits number
 the last one is a check digit
 the usual formatting is like '24.000.0048'

if the IEAL 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 ``24'' (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)
AM
The state of Amazonas uses: 9digits number
 the last one is a check digit
 the usual formatting is like '11.111.1110'

if the IEAM 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)
BA
The state of Bahia uses: 8digits number
 the last two are check digits
 the usual formatting is like '12345663'
MA
The state of Maranha~o uses: 9digits number
 the 9th is a check digit
 the usual formatting is like '12.000.0385'

if the IEMA 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 ``12'' (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)
MG
The state of Minas Gerais uses: 13digits number
 the 11th and 12th are check digits
 the usual formatting is like '062.307.904/0081'

to determine if IE/MG 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.)
PR
The state of Parana uses: 10digits number
 the 9th and 10th are check digits
 the usual formatting is like '123.4567850'
RO
The state of Rondonia uses: 14digits number
 the 14th is a check digit
 the usual formatting is like '00000000625213'

if the IERO 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
RR
The state of Roraima uses: 9digits number
 the 9th is a check digit
 the usual formatting is like '24.006.6281'

if the IERR 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 ``24'' (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)
SP
The state of Sa~o Paulo uses: 12digits number
 the 9th and 12nd are check digits
 the usual formatting is like '110.042.490.114'
BUGS
 This documentation is faulty
 If you want handling more than AC, AL, AM, MA, MG, PR, RO, RO and SP, you'll have to wait for the next releases
 The handling of IESP 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)
AUTHOR
A. R. Ferreira, <[email protected]>COPYRIGHT AND LICENSE
Copyright (C) 20052007 by A. R. FerreiraThis library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.