Ainda como eu disse, só a questão da ordem.
Uma vez que a "descriptografia" deu certo, só usá-la pra decifrar a "criptografia", que só depende da ordem.
FUNCTION ConverteFromCEP( cCep )
LOCAL oElement, cKey := "", ConvList
ConvList := { ;
{ "UG", "AL", "UG", "AL", "GU", "LA", "00", "LA" }, ;
{ "X8", "CN", "X8", "CN", "8X", "NC", "8X", "NC" }, ;
{ "Z0", "EP", "02", "EP", "0Z", "7Y", "02", "PE" }, ;
{ "1B", "GR", "1B", "03", "B1", "RG", "B1", "GR" }, ;
{ "3D", "ID", "3D", "04", "D3", "04", "3D", "DI" }, ;
{ "4C", "JS", "05", "05", "05", "SJ", "C4", "SJ" }, ;
{ "2A", "HQ", "06", "06", "06", "06", "A2", "06" }, ;
{ "09", "FO", "09", "FO", "07", "07", "90", "OF" }, ;
{ "Y7", "DM", "Y7", "DM", "7Y", "MD", "7Y", "MD" }, ;
{ "V5", "BK", "09", "BK", "09", "09", "09", "KB" } }
FOR EACH oElement IN cCep
cKey += ConvList[ Val( oElement ) + 1, oElement:__EnumIndex ]
NEXT
RETURN cKey
usei este fonte pra testar.
#include "inkey.ch"
REQUEST HB_CODEPAGE_PTISO
PROCEDURE Main
LOCAL cnGuia, Rs, nKey := 0, cSql, cCep, cKeyDne, cNewKeyDne, nCont := 1, aTabelaList, oElement
aTabelaList := { ;
{ "LOG_LOCALIDADE", "LOC_KEY_DNE" }, ;
{ "LOG_UNID_OPER", "UOP_KEY_DNE" }, ;
{ "LOG_CPC", "CPC_KEY_DNE" }, ;
{ "LOG_GRANDE_USUARIO", "GRU_KEY_DNE" }, ;
{ "LOG_LOGRADOURO", "LOG_KEY_DNE" } }
Set( _SET_CODEPAGE, "PTISO" )
SetMode( 40, 100 )
CLS
cnGuia := ConexaoAccess()
cnGuia:Open()
FOR EACH oElement IN aTabelaList
? oElement[ 1 ]
cSql := "SELECT " + ;
oElement[ 2 ] + " AS KEYDNE " + ;
"FROM " + oElement[ 1 ]
Rs := cnGuia:Execute( cSql )
DO WHILE nKey != K_ESC .AND. ! Rs:Eof()
nKey := Inkey()
cKeyDne := Rs:Fields( "KEYDNE" ):Value
cCep := ConverteToCep( cKeyDne )
cNewKeyDne := ConverteFromCep( cCep )
nCont++
IF Left( cKeyDne, 4 ) != Left( cNewKeyDne, 4 ) .AND. cKeyDne != "LOC"
? nCont, cCep, Transform( cKeyDne, "@R XX-XX-XX-XX-XX-XX-XX-XX" ), Transform( cNewKeyDne, "@R XX-XX-XX-XX-XX-XX-XX-XX" ), cKeyDne == cNewKeyDne
ENDIF
Rs:MoveNext()
ENDDO
? nCont
NEXT
Rs:Close()
cnGuia:Close()
? nCont
RETURN
Testado para todos os 1.016.352 CEPs existentes no guia postal.