No Salesforce CRM , todo objeto tem um ID alfanumérico de 15 caracteres, que diferencia maiúsculas de minúsculas. Se alguém está curioso, na verdade é o número da base 62 . No entanto, as ferramentas usadas para migração e integração de dados podem ou não suportar a distinção entre maiúsculas e minúsculas. Para superar isso, os IDs podem ser convertidos com segurança em IDs alfanuméricos que não diferenciam maiúsculas de minúsculas de 18 caracteres. Nesse processo, a soma de verificação alfanumérica de 3 caracteres é anexada ao ID. O algoritmo de conversão é:
Exemplo :
a0RE000000IJmcN
Divida o ID em três blocos de 5 caracteres.
a0RE0 00000 IJmcN
Inverta cada pedaço.
0ER0a 00000 NcmJI
Substitua cada caractere em cada pedaço por
1
se estiver em maiúsculas ou por0
outro modo.01100 00000 10011
Para cada número binário de 5 dígitos
i
, obtenha o caractere na posiçãoi
em concatenação do alfabeto maiúsculo e os dígitos 0-5 (ABCDEFGHIJKLMNOPQRSTUVWXYZ012345
).00000 -> A, 00001 -> B, 00010 -> C, ..., 11010 -> Z, 11011 -> 0, ..., 11111 -> 5`
Produzindo:
M A T
Anexe esses caracteres, a soma de verificação, ao ID original.
Saída :
a0RE000000IJmcNMAT
Escreva o programa ou a função que usa a sequência alfanumérica de 15 caracteres (ASCII) como entrada e retorna a identificação de 18 caracteres.
A validação de entrada está fora do escopo desta questão. Os programas podem retornar qualquer valor ou falha na entrada inválida.
Por favor, não use os recursos de idiomas apropriados do Salesforce que tornam esse desafio trivial (como fórmula CASESAFEID()
, conversão Id
para String
APEX etc.).
Casos de teste
a01M00000062mPg -> a01M00000062mPgIAI
001M000000qfPyS -> 001M000000qfPySIAU
a0FE000000D6r3F -> a0FE000000D6r3FMAR
0F9E000000092w2 -> 0F9E000000092w2KAA
aaaaaaaaaaaaaaa -> aaaaaaaaaaaaaaaAAA
AbCdEfGhIjKlMnO -> AbCdEfGhIjKlMnOVKV
aBcDEfgHIJKLMNO -> aBcDEfgHIJKLMNO025
public class X{public X(Id i){System.debug((String)i);}}
. Porém, funciona apenas com IDs válidos do Salesforce.