Salesforce CRM、すべてのオブジェクトは、大文字と小文字が区別される15文字の英数字のIDを持っています。好奇心urious盛な人は、実際にはbase-62番号です。ただし、データの移行と統合に使用されるツールは、大文字と小文字の区別をサポートする場合としない場合があります。これを克服するために、IDは大文字と小文字を区別しない18文字の英数字IDに安全に変換できます。そのプロセスでは、3文字の英数字のチェックサムがIDに追加されます。変換アルゴリズムは次のとおりです。
例:
a0RE000000IJmcN
IDを3つの5文字のチャンクに分割します。
a0RE0 00000 IJmcN
各チャンクを逆にします。
0ER0a 00000 NcmJI
すべてのチャンクの各文字を
1
大文字の場合、または0
そうでない場合は置き換えます。01100 00000 10011
5桁の2進数ごとに
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 propretiary言語機能を使用しないでくださいCASESAFEID()
変換、Id
にString
APEX&Cで)。
テストケース
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でのみ機能します。