W Salesforce CRM każdy obiekt ma 15-znakowy alfanumeryczny identyfikator, w którym rozróżniana jest wielkość liter. Jeśli ktoś jest ciekawy, w rzeczywistości jest to liczba podstawowa-62 . Jednak narzędzia używane do migracji i integracji danych mogą, ale nie muszą obsługiwać rozróżniania wielkości liter. Aby temu zaradzić, identyfikatory można bezpiecznie przekonwertować na alfanumeryczne identyfikatory bez rozróżniania wielkości liter. W tym procesie do ID dołączana jest 3-znakowa alfanumeryczna suma kontrolna. Algorytm konwersji to:
Przykład :
a0RE000000IJmcN
Podziel identyfikator na trzy 5-znakowe części.
a0RE0 00000 IJmcNOdwróć każdy fragment.
0ER0a 00000 NcmJIZastąp każdą postać w każdym fragmencie,
1jeśli ma wielkie litery lub0jeśli inaczej.01100 00000 10011Dla każdej 5-cyfrowej liczby binarnej
iuzyskaj znak w pozycjiiw połączeniu wielkich liter i cyfr 0-5 (ABCDEFGHIJKLMNOPQRSTUVWXYZ012345).00000 -> A, 00001 -> B, 00010 -> C, ..., 11010 -> Z, 11011 -> 0, ..., 11111 -> 5`Wydajność:
M A TDołącz te znaki, sumę kontrolną, do oryginalnego identyfikatora.
Wyjście :
a0RE000000IJmcNMAT
Napisz program lub funkcję, która pobiera 15-znakowy ciąg alfanumeryczny (ASCII) jako dane wejściowe i zwraca 18-znakowy identyfikator.
Sprawdzanie poprawności danych wejściowych jest poza zakresem tego pytania. Programy mogą zwracać dowolną wartość lub ulegać awarii w przypadku nieprawidłowych danych wejściowych.
Proszę nie używać funkcji języków propretorialnych Salesforce, które sprawiają, że to wyzwanie jest trywialne (takie jak formuła CASESAFEID(), konwersja Iddo StringAPEX i c).
Przypadki testowe
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);}}. Działa tylko z prawidłowymi identyfikatorami Salesforce.