У Salesforce CRM кожен об’єкт має 15-символьний буквено-цифровий ідентифікатор, який залежить від регістру. Якщо хтось цікавий, насправді це номер-62 . Однак інструменти, використовувані для міграції та інтеграції даних, можуть або не підтримують чутливість до регістру. Щоб подолати це, ідентифікатори можна безпечно перетворити на 18-символьні буквенечутливі буквено-цифрові ідентифікатори. У цьому процесі 3-символьна буквено-числова контрольна сума додається до ідентифікатора. Алгоритм перетворення:
Приклад :
a0RE000000IJmcN
Розділіть ідентифікатор на три фрагменти з 5 символів.
a0RE0 00000 IJmcNПереверніть кожен шматок.
0ER0a 00000 NcmJIЗамініть кожного символу в кожному фрагменті на
1великі літери або на0інше.01100 00000 10011Для кожного 5-розрядного двійкового числа
iзнайдіть символ у позиціїiу поєднанні великого алфавіту та цифр 0-5 (ABCDEFGHIJKLMNOPQRSTUVWXYZ012345).00000 -> A, 00001 -> B, 00010 -> C, ..., 11010 -> Z, 11011 -> 0, ..., 11111 -> 5`Вихід:
M A TДодайте ці символи, контрольну суму, до оригінального ідентифікатора.
Вихід :
a0RE000000IJmcNMAT
Напишіть програму або функцію, яка бере 15-символьну буквено-цифрову (ASCII) рядок як вхід і повертає 18-символьний ідентифікатор.
Перевірка вхідних даних не виходить за рамки цього питання. Програми можуть повернути будь-яке значення або збій при неправильному введенні.
Будь ласка, не використовуйте функцію Salesforce propretiary Мови , які роблять цю задачу тривіальної (наприклад, формули CASESAFEID(), перетворюючи Idдо Stringв APEX & с).
Випробування
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);}}. Однак працює лише з дійсними ідентифікаторами Salesforce.