В 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.