ในSalesforce CRMทุกอ็อบเจ็กต์มี ID ตัวอักษรผสมตัวเลข 15 ตัวซึ่งเป็นแบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ถ้าใครอยากรู้อยากเห็นจริง ๆ แล้วมันเป็นเลขฐาน 62จำนวน อย่างไรก็ตามเครื่องมือที่ใช้สำหรับการโยกย้ายข้อมูลและการรวมอาจสนับสนุนหรือไม่ก็ได้ เพื่อที่จะเอาชนะนั้น ID สามารถแปลงได้อย่างปลอดภัยเป็น 18 ตัวอักษรและตัวเลขตัวพิมพ์เล็ก - ใหญ่ ในการตรวจสอบตัวเลขและตัวอักษร 3 กระบวนการนั้นจะถูกผนวกเข้ากับ ID อัลกอริทึมการแปลงคือ:
ตัวอย่าง :
a0RE000000IJmcN
แยก ID ออกเป็นสามส่วนห้าตัวอักษร
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
ต่อท้ายอักขระเหล่านี้คือ checksum ให้กับ ID ดั้งเดิม
ผลผลิต :
a0RE000000IJmcNMAT
เขียนโปรแกรมหรือฟังก์ชั่นซึ่งใช้สตริงตัวอักษรผสมตัวเลข (ASCII) 15 ตัวเป็นอินพุตและส่งคืน ID 18 อักขระ
การตรวจสอบการป้อนข้อมูลอยู่นอกขอบเขตของคำถามนี้ โปรแกรมอาจคืนค่าหรือความผิดพลาดใด ๆ จากอินพุตที่ไม่ถูกต้อง
โปรดอย่าใช้คุณสมบัติของภาษาที่เป็นประโยชน์ของ Salesforce ซึ่งทำให้ความท้าทายนี้เป็นเรื่องเล็กน้อย (เช่นสูตร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);}}
ไบต์: ใช้งานได้กับรหัสพนักงานขายที่ถูกต้องเท่านั้น