Trong Salesforce CRM , mọi đối tượng đều có ID chữ và số gồm 15 ký tự, phân biệt chữ hoa chữ thường. Nếu ai đó tò mò, thực sự đó là số cơ sở 62 . Tuy nhiên, các công cụ được sử dụng để di chuyển và tích hợp dữ liệu có thể hoặc không thể hỗ trợ độ nhạy trường hợp. Để khắc phục điều đó, ID có thể được chuyển đổi một cách an toàn thành ID chữ và số không phân biệt chữ hoa chữ thường. Trong quá trình đó, tổng kiểm tra chữ và số gồm 3 ký tự được gắn vào ID. Thuật toán chuyển đổi là:
Ví dụ :
a0RE000000IJmcN
Tách ID thành ba khối 5 ký tự.
a0RE0 00000 IJmcN
Đảo ngược từng khúc.
0ER0a 00000 NcmJI
Thay thế mỗi ký tự trong mỗi đoạn bằng
1
chữ hoa hoặc0
nếu khác.01100 00000 10011
Đối với mỗi số nhị phân 5 chữ số
i
, lấy ký tự ở vị tríi
nối của bảng chữ cái in hoa và chữ số 0-5 (ABCDEFGHIJKLMNOPQRSTUVWXYZ012345
).00000 -> A, 00001 -> B, 00010 -> C, ..., 11010 -> Z, 11011 -> 0, ..., 11111 -> 5`
Năng suất:
M A T
Nối các ký tự này, tổng kiểm tra vào ID gốc.
Đầu ra :
a0RE000000IJmcNMAT
Viết chương trình hoặc hàm lấy chuỗi ký tự gồm 15 ký tự (ASCII) làm đầu vào và trả về ID 18 ký tự.
Xác nhận đầu vào nằm ngoài phạm vi của câu hỏi này. Các chương trình có thể trả về bất kỳ giá trị hoặc sự cố trên đầu vào không hợp lệ.
Xin vui lòng, không sử dụng các tính năng của ngôn ngữ chính của Salesforce khiến cho thách thức này trở nên tầm thường (như công thức CASESAFEID()
, chuyển đổi Id
sang String
trong APEX & c).
Các trường hợp thử nghiệm
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);}}
. Tuy nhiên, chỉ hoạt động với ID Salesforce hợp lệ.