에서 세일즈 포스 CRM , 모든 객체는 대소 문자를 구분합니다 15 문자 숫자 ID를 가지고 있습니다. 호기심이 많은 사람이라면 실제로는 base-62 number 입니다. 그러나 데이터 마이그레이션 및 통합에 사용되는 도구는 대소 문자 구분을 지원하거나 지원하지 않을 수 있습니다. 이를 극복하기 위해 ID는 대소 문자를 구분하지 않는 18 자의 영숫자 ID로 안전하게 변환 할 수 있습니다. 이 과정에서 3 자리 영숫자 체크섬이 ID에 추가됩니다. 변환 알고리즘은 다음과 같습니다.
예 :
a0RE000000IJmcN
ID를 3 개의 5 문자 청크로 나눕니다.
a0RE0 00000 IJmcN
각 청크를 뒤집습니다.
0ER0a 00000 NcmJI
모든 청크의 각 문자는
1
대문자이거나0
그렇지 않으면 바꿉니다 .01100 00000 10011
각 5 자리 이진수에 대해 대문자 알파벳과 숫자 0-5 ( ) 를 연결
i
하여 위치i
에 문자를 가져옵니다ABCDEFGHIJKLMNOPQRSTUVWXYZ012345
.00000 -> A, 00001 -> B, 00010 -> C, ..., 11010 -> Z, 11011 -> 0, ..., 11111 -> 5`
굽힐 수 있는:
M A T
이러한 문자 (체크섬)를 원래 ID에 추가하십시오.
출력 :
a0RE000000IJmcNMAT
15 자 영숫자 (ASCII) 문자열을 입력으로 사용하고 18 자 ID를 리턴하는 프로그램 또는 함수를 작성하십시오.
입력 유효성 검사는이 질문의 범위를 벗어납니다. 잘못된 입력으로 인해 프로그램이 값을 반환하거나 충돌 할 수 있습니다.
이 문제를 사소하게 만드는 Salesforce 독점 언어 기능 (예 : 수식 CASESAFEID()
, APEX & c에서 변환) Id
을 사용하지 마십시오 String
.
테스트 사례
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에서만 작동합니다.