วิธีที่มีประสิทธิภาพที่สุดคือการใช้ อัลกอริทึมการเข้ารหัสการรักษารูปแบบ; นั่นคืออัลกอริทึมที่เป็นการเปลี่ยนแปลงในชุดขนาดตามอำเภอใจ (เช่น ลำดับทศนิยม 10 หลัก)
การใช้มันจะง่าย: คุณจะเลือกคีย์สุ่มและเก็บไว้ คุณต้องเก็บหมายเลขลำดับไว้ด้วย (ในรูปแบบเดียวกับเอาต์พุต เช่น คุณอาจขึ้นต้นด้วย 0000000000) จากนั้น เมื่อถึงเวลาสร้าง ID ถัดไป คุณต้องเพิ่มหมายเลขลำดับ และส่งผ่านอัลกอริทึม FPE นั่นคือ ID ต่อไปของคุณ [1]
เนื่องจากอัลกอริทึม FPE เป็นการเรียงสับเปลี่ยน คุณจะไม่สร้าง ID เดียวกันซ้ำสองครั้งจนกว่าจะมีการตัดหมายเลขลำดับ จึงไม่มีการชนกัน คุณสามารถสร้างรหัสให้สั้นได้ตามต้องการ (อัลกอริทึม FPE ในปัจจุบันมีปัญหาเกี่ยวกับพื้นที่ขนาดเล็กมาก หากคุณรักษารหัสให้มีความยาวอย่างน้อย 6 หลัก คุณจะปลอดภัย) และเนื่องจากอัลกอริทึม FPE มีความปลอดภัย ID ใดๆ จึงไม่ให้ข้อมูลใดๆ เกี่ยวกับ ID อื่นๆ (รวมถึงลำดับการสร้างที่สัมพันธ์กัน)
ข้อเสีย: ไม่มีไลบรารี FPE ทั่วไป (เท่าที่ฉันรู้) สำหรับการใช้งานฉันอยากจะแนะนำ FF1 จากเอกสารนี้; การนำไปใช้ตั้งแต่เริ่มต้นจะเป็นงานเล็กน้อย (แต่จะตอบสนองความต้องการของคุณ)
วิธีที่มีประสิทธิภาพน้อยกว่าแต่นำไปใช้ได้ง่ายกว่าคือทำการเปลี่ยนแปลงในสิ่งที่คุณแนะนำ: เก็บรายการ ID ที่คุณยังไม่ได้กำหนด
ที่นี่ ระหว่างการตั้งค่า คุณจะต้องเริ่มต้นรายการ ID ที่เป็นไปได้ทั้งหมดตามลำดับ เช่น 000000 ถึง 999999 นอกจากนี้ คุณจะต้องตั้งค่า N เป็น ID สูงสุดที่ไม่ได้กำหนด (ในตัวอย่างนี้ N = 999999)
จากนั้น เมื่อถึงเวลาออก ID ใหม่ คุณจะเลือกตัวเลขสุ่ม x ระหว่าง 0 ถึง N (รวม) จากนั้น คุณจะสลับรหัสที่ดัชนี N และ x (และถ้า x=N การดำเนินการสลับนี้จะไม่ทำอะไรเลย) จากนั้น คุณจะส่งออกค่าที่ไม่อยู่ในดัชนี N (แล้วลดลง N)
แค่นั้นแหละ; นี้เป็นจริง ฟิชเชอร์-เยตส์สับเปลี่ยนคุณสามารถทำสิ่งนี้ได้ตามต้องการ (ตามที่ฉันเขียนไว้) หรือคุณสามารถทำการสับทั้งหมดในเวลาตั้งค่า (และเพียงแค่อ่านสิ่งต่าง ๆ นอกรายการเมื่อสร้าง ID)
การดำเนินการนี้มีประสิทธิภาพน้อยกว่าแนวคิด FPE เนื่องจากการตั้งค่ามีความเกี่ยวข้องมากกว่า และคุณต้องเก็บรายการ ID จำนวนมากไว้รอบๆ ในทางกลับกัน มันง่ายกว่าการพยายามใช้ FF1 ตั้งแต่เริ่มต้น...
[1]: อัลกอริทึมการเข้ารหัสที่รักษารูปแบบยังคงใช้ 'ปรับแต่ง'; คุณต้องการคงค่านั้นไว้ (เช่น สตริงว่าง) การปรับแต่งให้บริการที่คุณไม่จำเป็นต้องใช้โดยเฉพาะ