Guia Postal dos correios

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Guia Postal dos correios

Mensagem por JoséQuintas »

Faço isso normalmente pelo meu aplicativo.
Se o código é atribuído pelo IBGE, é baixar a tabela do IBGE....
Isso é por cidade, colocar em cada endereço é desperdício de espaço.

Código: Selecionar todos

SEEK cUF + cCidade
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Guia Postal dos correios

Mensagem por JoséQuintas »

Pra quem quiser.
Mesma base dos correios, apenas com a adição de NUMCEP, que é o cep descriptografado.
Backup em MySQL.

http://www.jpatecnologia.com.br/arquivo ... 161031.zip

Comprada há menos de 48 horas, e já não é atualizada.
Fod.m-se os correios.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Guia Postal dos correios

Mensagem por gilbertosilverio »

Jose,

Onde vc acho a senha... procurei e não achei... kkk

Meu nariz e grande, deve ser por isso que nãoacho... kkkk
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Guia Postal dos correios

Mensagem por alxsts »

Olá!

O interessante é ter o código do município em cada endereço de cliente (nem precisa ter o nome da cidade e UF) e uma tabela de cidades cuja chave é o código do município. Isto evita problemas nos casos em que as cidades mudam de nome, como relatado no tópico Código do Município IBGE - Relato.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Guia Postal dos correios

Mensagem por JoséQuintas »

A string pronta pra uso no Harbour, via ADO ou equivalente.
correios.png
Importante: Harbour configurado como PTISO, e o editor de fontes também.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Guia Postal dos correios

Mensagem por JoséQuintas »

Os fontes que usei, postar em partes, mais ou menos na ordem em que fui usando.

A principal de abrir conexão com o mdb:

Código: Selecionar todos

PROCEDURE Main2

   LOCAL cnAccess, aDbList, cDb

   Set( _SET_CODEPAGE, "PTISO" )
   cnAccess := ConexaoAccess()
   cnAccess:Open()
   aDbList := ListFiles( cnAccess )
   FOR EACH cDb IN aDbList
      ListRecords( cnAccess, cDb )
   NEXT
   ConsultaMeuCep( cnAccess )

   cnAccess:Close()

   RETURN

FUNCTION ConexaoAccess()

   LOCAL cnAccess

   cnAccess   := win_OleCreateObject( "ADODB.Connection" )
   cnAccess:ConnectionString := "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\program files (x86)\correios\Access\dbgpbe.mdb;Mode=Share Deny Write;Persist Security Info=False;Jet OLEDB:Database Password=«¹½¿¥Ð²þÞ¢§³¼»"

   RETURN cnAccess
listar tabelas do mdb (nomes das tabelas)

Código: Selecionar todos

#define ADSCHEMATABLES 20

FUNCTION ListFiles( cnAccess )

   LOCAL Rs, aDbList := {}, cTb

   Rs := cnAccess:OpenSchema( ADSCHEMATABLES )
   DO WHILE ! Rs:Eof()
      cTb := rs:fields( "TABLE_NAME" ):Value
      IF Left( cTb, 3 ) == "LOG"
         AAdd( aDbList, cTb )
      ENDIF
      Rs:MoveNext()
   ENDDO
   Rs:Close()

   RETURN aDbList
listar o nome dos campos, e o conteúdo do primeiro registro (no access TOP 1 limita ao primeiro registro, o que no MySQL seria LIMIT 1)

Código: Selecionar todos

FUNCTION ListRecords( cnAccess, cDb )

   LOCAL Rs, nCont

   ? Pad( cDb, 20, "-" )
   Rs := cnAccess:Execute( "SELECT TOP 1 * FROM " + cDb )
   FOR nCont = 0 TO Rs:Fields:Count() - 1
      ? Rs:Fields( nCont ):Name, Rs:Fields( nCont ):Value
   NEXT
   Rs:Close()

   RETURN NIL
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Guia Postal dos correios

Mensagem por JoséQuintas »

A conversão do CEP, ou descriptografia se preferirem.

Código: Selecionar todos

FUNCTION ConverteCEP( cCodigo )

   LOCAL nCont, cTxt, cNovo := "", cNum

   FOR nCont = 1 TO Len( cCodigo ) STEP 2
      cTxt := Substr( cCodigo, nCont, 2 )
      DO CASE
      CASE cTxt $ "UG,LA,AL,GU" ; cNum := "0"
      CASE cTxt $ "X8,8X,CN,NC" ; cNum := "1"
      CASE cTxt $ "Z0,EP,PE,0Z" ; cNum := "2"
      CASE cTxt $ "GR,B1,1B,RG" ; cNum := "3"
      CASE cTxt $ "3D,DI,D3,ID" ; cNum := "4"
      CASE cTxt $ "SJ,C4,4C,JS" ; cNum := "5"
      CASE cTxt $ "2A,A2,QH,HQ" ; cNum := "6"
      CASE cTxt $ "FO,09,90,OF" ; cNum := "7"
      CASE cTxt $ "7Y,DM,Y7,MD" ; cNum := "8"
      CASE cTxt $ "5V,BK,V5,KB" ; cNum := "9"
      OTHERWISE                 ; cNum := "X"
      ENDCASE
      cNovo += cNum
   NEXT

   IF Len( cCodigo ) != 16 // não é cep, não converte
      cNovo = cCodigo
   ENDIF

   RETURN cNovo
A conversão, mas neste caso já tinha colocado a base no MySql

Código: Selecionar todos

PROCEDURE Main

   LOCAL cnMySql, cTable, aTable, aConvertList, cSql, Rs, cNumCep, nID, nKey, cCampo, cChave, nCont, nTotal

   Set( _SET_CODEPAGE, "PTISO" )
   cnMySql := ConexaoMySql()
   cnMySql:Open()

   aConvertList := { ;
      { "LOG_UNID_OPER",      "UOP_KEY_DNE", "UOP_NU_SEQUENCIAL" }, ;
      { "LOG_LOGRADOURO",     "LOG_KEY_DNE", "LOG_NU_SEQUENCIAL" }, ;
      { "LOG_LOCALIDADE",     "LOC_KEY_DNE", "LOC_NU_SEQUENCIAL" }, ;
      { "LOG_GRANDE_USUARIO", "GRU_KEY_DNE", "GRU_NU_SEQUENCIAL" }, ;
      { "LOG_CPC",            "CPC_KEY_DNE", "CPC_NU_SEQUENCIAL" } }

   FOR EACH aTable IN aConvertList
      cTable := aTable[ 1 ]
      cCampo := aTable[ 2 ]
      cChave := aTable[ 3 ]
      ? "tabela", cTable, "campo", cCampo, "chave", cChave
      Rs := cnMySql:Execute( "SELECT COUNT(*) AS QTD FROM " + cTable )
      nTotal := Rs:Fields( "QTD" ):Value
      Rs:Close()
      cSql := "SELECT NUMCEP, " + cChave + ", " + cCampo + " FROM " + cTable
      Rs := cnMySql:Execute( cSql )
      nCont := 0
      DO WHILE nKey != K_ESC .AND. ! Rs:Eof()
         nKey := Inkey()
         nCont++
         cNumCep := ConverteCep( Rs:Fields( cCampo ):Value )
         nID     := Rs:Fields( cChave ):Value
         IF Mod( nCont, 1000 ) = 0
            ? cTable, nTotal, nCont, Rs:Fields( cChave ):Value, nID, cNumCep
         ENDIF
         IF Rs:Fields( "NUMCEP" ):Value == NIL .OR. Len( Trim( rs:Fields( "NUMCEP" ):Value ) ) = 0
            cSql := "UPDATE " + cTable + " SET NUMCEP='" + cNumCep + "' WHERE " + cChave + "=" + Ltrim( Str( nID ) )
            cnMySql:Execute( cSql )
         ENDIF
         Rs:MoveNext()
      ENDDO
      Rs:Close()
   NEXT
   cnMySql:Close()

   RETURN
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Guia Postal dos correios

Mensagem por JoséQuintas »

Pra gravar no MySQL deu preguiça, então encontrei o utilitário Bullzip que faz isso.
Ele joga direto do mdb pra MySQL, sem nada de programação.
Apenas criei uma base de dados vazia chamada CEP, por precaução.

Também assim ficou mais fácil visualizar as informações pelo HEIDISQL.

Não quis arriscar a instalar algum Access pirata no W10, ainda mais pra usar uma única vez.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Guia Postal dos correios

Mensagem por JoséQuintas »

Só pra completar:
As pastas não tem muitos arquivos, em último caso, seria abrir um por um no bloco de notas.
Mas eu não sabia disso, acabei mesmo foi encontrando a informação no google... nesse caso procurei o nariz de alguém também... rs
correios1.png
correios2.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Guia Postal dos correios

Mensagem por gilbertosilverio »

Ai eu me pergunto!

Pra quer colocar senha, se ela vem junto... kkkk
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Guia Postal dos correios

Mensagem por JoséQuintas »

O interessante é ter o código do município em cada endereço de cliente (nem precisa ter o nome da cidade e UF) e uma tabela de cidades cuja chave é o código do município. Isto evita problemas nos casos em que as cidades mudam de nome, como relatado no tópico Código do Município IBGE - Relato.
Nesse caso vamos precisar de uma tabela não oficial pra consertar as tabelas oficiais.

Por enquanto ainda nem sei sobre como manter a tabela oficial atualizada, e já está querendo colocar algo não oficial nela... problema...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Guia Postal dos correios

Mensagem por JoséQuintas »

Pra quer colocar senha, se ela vem junto... kkkk
Talvez seja só pra impedir um usuário comum de estragar o conteúdo.
Lembrando que o Access faz parte o Office.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Guia Postal dos correios

Mensagem por JoséQuintas »

Mais um comentário....

Meu download está disponível nos correios por 60 dias.

Durante 60 dias vou poder baixar o arquivo que já virou desatualizado.......
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Guia Postal dos correios

Mensagem por gilbertosilverio »

Jose,

So por curiosidade, como você montou o ConverteCEP(), como voce descobriu as referencias aos numeros?
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Guia Postal dos correios

Mensagem por JoséQuintas »

Comecei pelo meu endereço: RUA MAESTRO ALFREDO BEVILACQUA, que só tem uma.
Identifiquei 03676-080

Considerando as 40 combinações diferentes, só a primeira pesquisa já pegou 8, restando 32.

Depois fui fazendo o mesmo com outras ruas únicas, e vendo o que sobrava.
Aproveitava as sobras que tinham mais "X" no cep convertido, pra resolver mais números por vez.

Nota: vi sobre isso numa pesquisa do google, que deu uma tabela que não funcionou.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder