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 IJmcNInverta cada pedaço.
0ER0a 00000 NcmJISubstitua cada caractere em cada pedaço por
1se estiver em maiúsculas ou por0outro modo.01100 00000 10011Para cada número binário de 5 dígitos
i, obtenha o caractere na posiçãoiem 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 TAnexe 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 Idpara StringAPEX 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.