在Salesforce CRM中,每个对象都有15个字符的字母数字ID,区分大小写。如果有人好奇,实际上它是62的基数。但是,用于数据迁移和集成的工具可能支持也可能不支持区分大小写。为了克服这个问题,可以将ID安全地转换为18个字符的不区分大小写的字母数字ID。在该过程中,将3个字符的字母数字校验和添加到ID。转换算法为:
范例:
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
将这些字符(校验和)附加到原始ID。
输出量:
a0RE000000IJmcNMAT
编写以15个字符的字母数字(ASCII)字符串作为输入并返回18个字符的ID的程序或函数。
输入验证不在此问题的范围内。程序可能会返回任何值,或者由于无效输入而崩溃。
请不要使用使该挑战变得微不足道的Salesforce专有语言的功能(例如,公式CASESAFEID()
,转换Id
为String
在APEX&c中 Formula)。
测试用例
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 ID。