In Salesforce CRM , ogni oggetto ha un ID alfanumerico di 15 caratteri, con distinzione tra maiuscole e minuscole. Se qualcuno è curioso, in realtà è il numero base-62 . Tuttavia, gli strumenti utilizzati per la migrazione e l'integrazione dei dati possono o meno supportare la distinzione tra maiuscole e minuscole. Per ovviare a ciò, gli ID possono essere tranquillamente convertiti in ID alfanumerici maiuscoli / minuscoli di 18 caratteri. In questo processo, il checksum alfanumerico di 3 caratteri viene aggiunto all'ID. L'algoritmo di conversione è:
Esempio :
a0RE000000IJmcN
Dividi l'ID in tre blocchi di 5 caratteri.
a0RE0 00000 IJmcNInvertire ogni blocco.
0ER0a 00000 NcmJISostituisci ogni personaggio in ogni blocco con
1se maiuscolo o in0caso contrario.01100 00000 10011Per ogni numero binario di 5 cifre
i, ottenere il carattere nella posizioneiin concatenazione dell'alfabeto maiuscolo e delle cifre 0-5 (ABCDEFGHIJKLMNOPQRSTUVWXYZ012345).00000 -> A, 00001 -> B, 00010 -> C, ..., 11010 -> Z, 11011 -> 0, ..., 11111 -> 5`cedendo:
M A TAggiungi questi caratteri, il checksum, all'ID originale.
Uscita :
a0RE000000IJmcNMAT
Scrivere un programma o una funzione che accetta come input una stringa alfanumerica (ASCII) di 15 caratteri e restituisce un ID di 18 caratteri.
La convalida dell'input non rientra nell'ambito di questa domanda. I programmi possono restituire qualsiasi valore o crash in caso di input non valido.
Per favore, non utilizzare le funzionalità di Salesforce lingue propretiary che rendono questa sfida banale (come la formula CASESAFEID(), la conversione Ida Stringin APEX & C).
Casi test
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);}}. Funziona solo con ID Salesforce validi, tuttavia.