Dans Salesforce CRM , chaque objet possède un ID alphanumérique à 15 caractères, qui respecte la casse. Si quelqu'un est curieux, c'est en fait le numéro de base 62 . Cependant, les outils utilisés pour la migration et l'intégration des données peuvent ou non prendre en charge la sensibilité à la casse. Pour surmonter cela, les identifiants peuvent être convertis en toute sécurité en identifiants alphanumériques insensibles à la casse de 18 caractères. Dans ce processus, une somme de contrôle alphanumérique à 3 caractères est ajoutée à l'ID. L'algorithme de conversion est:
Exemple :
a0RE000000IJmcN
Divisez l'ID en trois morceaux de 5 caractères.
a0RE0 00000 IJmcNInversez chaque morceau.
0ER0a 00000 NcmJIRemplacez chaque caractère de chaque bloc par
1s'il est en majuscule ou par0sinon.01100 00000 10011Pour chaque nombre binaire à 5 chiffres
i, obtenez le caractère à la positionidans la concaténation de l'alphabet majuscule et des chiffres 0-5 (ABCDEFGHIJKLMNOPQRSTUVWXYZ012345).00000 -> A, 00001 -> B, 00010 -> C, ..., 11010 -> Z, 11011 -> 0, ..., 11111 -> 5`Rendement:
M A TAjoutez ces caractères, la somme de contrôle, à l'ID d'origine.
Sortie :
a0RE000000IJmcNMAT
Écrire un programme ou une fonction qui prend en entrée une chaîne alphanumérique (ASCII) de 15 caractères et renvoie un ID de 18 caractères.
La validation des entrées est hors de portée de cette question. Les programmes peuvent retourner n'importe quelle valeur ou planter sur une entrée non valide.
S'il vous plaît, ne pas utiliser les fonctionnalités de Salesforce langues propretiary qui rendent ce défi trivial (comme la formule CASESAFEID(), la conversion Idà StringApex et c).
Cas de 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);}}. Fonctionne uniquement avec des ID Salesforce valides.