Solução para Código Municício (IBGE) e Código País (Bacen) automático NFE

Saudações, em um sistema que estou desenvolvendo me deparei com a necessidade de colocar os campos Código Municício (IBGE) e Código País (Bacen) para emissão de NFE.

Segue a solução que fiz

No link abaixo seguem as tabelas preenchidas com os respectivos códigos e municípios / países
Anexo: tabela e estrutura Bacen e IBGE (mysql)
http://ojrconsultoria.com.br/temp/bacen-ibge.zip

No formulário usei o padrão do SC para gerar o endereço através do CEP mesmo e fiz um evento ajax para o campo código do municipio e um para código país.

No código Município (ajax onchange)
m_php_codigoMun();//criar o código abaixo como método em programação métodos php

$sqlMun = "SELECT cc2_codigo from cc2ojr where replace(cc2_municipio,' ','-') = '".removerAcento({sa1_municipio})."' ORDER BY length(cc2_municipio) "; sc_lookup(lookupMun,$sqlMun); {sa1_cod_municipio} = (empty({lookupMun})) ? {sa1_cod_municipio} : {lookupMun[0][0]};

No código País (ajax onchange, lembrando que meu campo país deixo iniciando por Brasil)
m_php_codigoPais();//criar o código abaixo como método em programação métodos php

if({sa1_pais}=='Brasil') { {sa1_cod_pais} = "01058"; } else { $sqlPais = "SELECT cch_codigo from cchojr where replace(cch_pais,' ','-') = '".removerAcento({sa1_pais})."' ORDER BY length(cch_pais) "; sc_lookup(lookupPais,$sqlPais); {sa1_cod_pais} = (empty({lookupPais})) ? {sa1_cod_pais} : {lookupPais[0][0]}; }

Obs.: pode-se criar um evento ajax no campo número (certamente irá ser preenchido) e chamar os dois métodos acima
ficando ajax onchange campo numero
m_php_codigoMun();
m_php_codigoPais();

Função usada acima
removerAcento (biblioteca)

[code]function removerAcento($str)
{
$a = array(‘À’,‘Á’,‘Â’,‘Ã’,‘Ä’,‘Å’,‘Æ’,‘Ç’,‘È’,‘É’,‘Ê’,‘Ë’,‘Ì’,‘Í’,‘Î’,‘Ï’,‘Ð’,‘Ñ’,‘Ò’,‘Ó’,‘Ô’,‘Õ’,‘Ö’,‘Ø’,‘Ù’,‘Ú’,‘Û’,‘Ü’,‘Ý’,‘ß’,‘à’,‘á’,‘â’,‘ã’,‘ä’,‘å’,‘æ’,‘ç’,‘è’,‘é’,‘ê’,‘ë’,‘ì’,‘í’,‘î’,‘ï’,‘ñ’,‘ò’,‘ó’,‘ô’,‘õ’,‘ö’,‘ø’,‘ù’,‘ú’,‘û’,‘ü’,‘ý’,‘ÿ’,‘Ā’,‘ā’,‘Ă’,‘ă’,‘Ą’,‘ą’,‘Ć’,‘ć’,‘Ĉ’,‘ĉ’,‘Ċ’,‘ċ’,‘Č’,‘č’,‘Ď’,‘ď’,‘Đ’,‘đ’,‘Ē’,‘ē’,‘Ĕ’,‘ĕ’,‘Ė’,‘ė’,‘Ę’,‘ę’,‘Ě’,‘ě’,‘Ĝ’,‘ĝ’,‘Ğ’,‘ğ’,‘Ġ’,‘ġ’,‘Ģ’,‘ģ’,‘Ĥ’,‘ĥ’,‘Ħ’,‘ħ’,‘Ĩ’,‘ĩ’,‘Ī’,‘ī’,‘Ĭ’,‘ĭ’,‘Į’,‘į’,‘İ’,‘ı’,‘IJ’,‘ij’,‘Ĵ’,‘ĵ’,‘Ķ’,‘ķ’,‘Ĺ’,‘ĺ’,‘Ļ’,‘ļ’,‘Ľ’,‘ľ’,‘Ŀ’,‘ŀ’,‘Ł’,‘ł’,‘Ń’,‘ń’,‘Ņ’,‘ņ’,‘Ň’,‘ň’,‘ʼn’,‘Ō’,‘ō’,‘Ŏ’,‘ŏ’,‘Ő’,‘ő’,‘Œ’,‘œ’,‘Ŕ’,‘ŕ’,‘Ŗ’,‘ŗ’,‘Ř’,‘ř’,‘Ś’,‘ś’,‘Ŝ’,‘ŝ’,‘Ş’,‘ş’,‘Š’,‘š’,‘Ţ’,‘ţ’,‘Ť’,‘ť’,‘Ŧ’,‘ŧ’,‘Ũ’,‘ũ’,‘Ū’,‘ū’,‘Ŭ’,‘ŭ’,‘Ů’,‘ů’,‘Ű’,‘ű’,‘Ų’,‘ų’,‘Ŵ’,‘ŵ’,‘Ŷ’,‘ŷ’,‘Ÿ’,‘Ź’,‘ź’,‘Ż’,‘ż’,‘Ž’,‘ž’,‘ſ’,‘ƒ’,‘Ơ’,‘ơ’,‘Ư’,‘ư’,‘Ǎ’,‘ǎ’,‘Ǐ’,‘ǐ’,‘Ǒ’,‘ǒ’,‘Ǔ’,‘ǔ’,‘Ǖ’,‘ǖ’,‘Ǘ’,‘ǘ’,‘Ǚ’,‘ǚ’,‘Ǜ’,‘ǜ’,‘Ǻ’,‘ǻ’,‘Ǽ’,‘ǽ’,‘Ǿ’,‘ǿ’,’ ‘,’/’,’(’,’)’,’.’,’ ‘);
$b = array(‘A’,‘A’,‘A’,‘A’,‘A’,‘A’,‘AE’,‘C’,‘E’,‘E’,‘E’,‘E’,‘I’,‘I’,‘I’,‘I’,‘D’,‘N’,‘O’,‘O’,‘O’,‘O’,‘O’,‘O’,‘U’,‘U’,‘U’,‘U’,‘Y’,‘S’,‘A’,‘A’,‘A’,‘A’,‘A’,‘A’,‘AE’,‘C’,‘E’,‘E’,‘E’,‘E’,‘I’,‘I’,‘I’,‘I’,‘N’,‘O’,‘O’,‘O’,‘O’,‘O’,‘O’,‘U’,‘U’,‘U’,‘U’,‘Y’,‘Y’,‘A’,‘A’,‘A’,‘A’,‘A’,‘A’,‘C’,‘C’,‘C’,‘C’,‘C’,‘C’,‘C’,‘C’,‘D’,‘D’,‘D’,‘D’,‘E’,‘E’,‘E’,‘E’,‘E’,‘E’,‘E’,‘E’,‘E’,‘E’,‘G’,‘G’,‘G’,‘G’,‘G’,‘G’,‘G’,‘G’,‘H’,‘H’,‘H’,‘H’,‘I’,‘I’,‘I’,‘I’,‘I’,‘I’,‘I’,‘I’,‘I’,‘I’,‘IJ’,‘IJ’,‘J’,‘J’,‘K’,‘K’,‘L’,‘L’,‘L’,‘L’,‘L’,‘L’,‘L’,‘L’,‘L’,‘L’,‘N’,‘N’,‘N’,‘N’,‘N’,‘N’,‘N’,‘O’,‘O’,‘O’,‘O’,‘O’,‘O’,‘OE’,‘OE’,‘R’,‘R’,‘R’,‘R’,‘R’,‘R’,‘S’,‘S’,‘S’,‘S’,‘S’,‘S’,‘S’,‘S’,‘T’,‘T’,‘T’,‘T’,‘T’,‘T’,‘U’,‘U’,‘U’,‘U’,‘U’,‘U’,‘U’,‘U’,‘U’,‘U’,‘U’,‘U’,‘W’,‘W’,‘Y’,‘Y’,‘Y’,‘Z’,‘Z’,‘Z’,‘Z’,‘Z’,‘Z’,‘S’,‘F’,‘O’,‘O’,‘U’,‘U’,‘A’,‘A’,‘I’,‘I’,‘O’,‘O’,‘U’,‘U’,‘U’,‘U’,‘U’,‘U’,‘U’,‘U’,‘U’,‘U’,‘A’,‘A’,‘AE’,‘AE’,‘O’,‘O’,’-’,’/’,’’,’’,’-’,’ ');

	$retorno = strtoupper(str_replace($a, $b, $str)); 	
	$retorno = str_replace("---","-",$retorno);
	return $retorno;

} [/code]

Espero ter contribuído.

Boa tarde Rodrigo,
Ajudou é muito. Obrigado por compartilhar

Muito bom Rodrigo. Obrigado

Essa solução que postei acima nem sempre funciona.
Resolvi todos os problemas comprando a base
http://produto.mercadolivre.com.br/MLB-716962336-base-completa-de-cep-em-mysql-com-ibge-gia-seo-_JM
Disponível código IBGE (cidade, estado e NFE) Código GIA (para ICMS) por CEP
Através do campo CEP fiz um evento ajax que seleciona os dados do cep e preenche tudo automaticamente.
Recomendo comprarem essa base, têm em vários formatos.

Rodrigo,

Se a sugestão que os membros passam, ajudam os outros colegas do fórum, isso é muito legal, 100% bacana.

Mas acho que a disposição de ajudar, abrindo uma parte do seu código (como MUITOS fazem aqui no fórum) é 200%.

Parabéns, continue assim.

E a rotina é extremamente útil.

Esse método eu cheguei a usar mas não era tão preciso.
Alterei para o seguinte método
http://www.scriptcase.com.br/forum/index.php/topic,14212.new.html#new