В Salesforce CRM каждый объект имеет 15-символьный буквенно-цифровой идентификатор, который учитывает регистр. Если кому-то интересно, на самом деле это номер базы 62 . Однако инструменты, используемые для переноса и интеграции данных, могут поддерживать или не поддерживать чувствительность к регистру. Чтобы преодолеть это, идентификаторы могут быть безопасно преобразованы в 18-символьные, без учета регистра буквенно-цифровые идентификаторы. В этом процессе трехзначная буквенно-цифровая контрольная сумма добавляется к идентификатору. Алгоритм преобразования:
Пример :
a0RE000000IJmcN
Разделите ID на три 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.