ஐடி மோதல் நிகழ்தகவு கால்குலேட்டர்
UUID, ULID, சிறு URL ஸ்லக்குகள், ஒரு முறை பயன்படும் குறியீடுகள் போன்ற சீரற்ற அடையாளங்களை உருவாக்கும் ஒவ்வொரு அமைப்பும், இரண்டு ஐடிகளும் ஒருபோதும் ஒரே மாதிரி இருக்காது என்ற வாய்ப்பை அமைதியாக நம்பியிருக்கிறது. புகழ்பெற்ற "பிறந்தநாள் முரண்பாட்டின்" (birthday paradox) பின்னணியில் உள்ள அதே கணிதத்தைப் பயன்படுத்தி இந்த கருவி அந்த ஆபத்தை மதிப்பிடுகிறது: நமது உள்ளுணர்வு கூறுவதை விட மிக விரைவாக மோதல்கள் சாத்தியமாகின்றன.
இது ஏன் முக்கியம்
ஒரு நிலையான அளவிலான இடத்திலிருந்து போதுமான சீரற்ற ஐடிகளை உருவாக்கினால், இறுதியில் இரண்டு ஐடிகள் தற்செயலாக பொருந்திவிடும். இதற்கு எத்தனை குறைவான ஐடிகள் தேவை என்பதுதான் ஆச்சரியமான விஷயம். வெறும் 23 பேர் மட்டுமே உள்ள ஒரு அறையில், 365 சாத்தியமான நாட்களில் இருந்து இருவருக்கும் ஒரே பிறந்தநாள் இருக்க 50% வாய்ப்பு ஏற்கனவே உள்ளது. அதே கணிதம் தரவுத்தள ஐடிகள், அமர்வு டோக்கன்கள், சிறு குறியீடுகளுக்கும் பொருந்தும், மிகப் பெரிய அளவில் மட்டுமே வேறுபடும்.
இதை அறிந்துகொள்வது, உங்கள் அமைப்பு அதன் காலப்போக்கில் உண்மையில் உருவாக்கும் ஐடிகளின் எண்ணிக்கைக்கு ஏற்ற வகையில் மோதல் ஆபத்தை ஏற்றுக்கொள்ளக்கூடிய அளவில் வைத்திருக்கும் ஒரு ஐடி திட்டத்தை (பிட்-நீளத்தை) தேர்ந்தெடுக்க உதவும்.
சூத்திரம்
N (இங்கு N = 2^bits) அளவிலான ஒரு இடத்திலிருந்து சீரற்ற முறையில் உருவாக்கப்பட்ட n ஐடிகளுக்கு, குறைந்தபட்சம் ஒரு மோதலின் தோராயமான நிகழ்தகவு:
இலக்கு மோதல் நிகழ்தகவு p ஐ அடைவதற்கு முன் நீங்கள் எத்தனை ஐடிகள் n உருவாக்கலாம் என்பதைக் கண்டறிய, சூத்திரம் இவ்வாறு மறுசீரமைக்கப்படுகிறது:
மோதல் வாய்ப்பு சரியாக 50% ஆக இருக்கும் ஐடிகளின் எண்ணிக்கை ஒரு பயனுள்ள குறிப்பு புள்ளியாகும் — இது "பிறந்தநாள் எல்லை" (birthday bound) என்று அழைக்கப்படுகிறது:
இந்த கால்குலேட்டரை எவ்வாறு பயன்படுத்துவது
- கீழிறங்கு பட்டியலில் இருந்து ஒரு ஐடி வகையைத் தேர்ந்தெடுக்கவும் — UUIDv4, UUIDv7, ULID, 8-எழுத்து Base62 சிறு குறியீடு, அல்லது 6-இலக்க எண் OTP போன்ற பொதுவான திட்டங்களுக்கு அவற்றின் அறியப்பட்ட சீரற்ற தன்மை (எண்ட்ரோபி) முன்பே நிரப்பப்பட்டிருக்கும்.
- நீங்கள் உங்கள் சொந்த ஐடி திட்டத்தை வடிவமைத்துக் கொண்டிருந்தால், அதற்குப் பதிலாக "Custom bit length" ஐத் தேர்ந்தெடுத்து, அது பயன்படுத்தும் சீரற்ற பிட்களின் எண்ணிக்கையை உள்ளிடவும்.
- உங்கள் அமைப்பு மொத்தமாக (அதன் முழு காலப்போக்கிலும், அல்லது ஒரு குறிப்பிட்ட காலகட்டத்தில்) உருவாக்கும் என்று நீங்கள் எதிர்பார்க்கும் ஐடிகளின் எண்ணிக்கையை உள்ளிடவும்.
- ஒரு இலக்கு மோதல் நிகழ்தகவை (சதவீதமாக) அமைக்கவும் — இது நீங்கள் ஏற்றுக்கொள்ள விரும்பும் ஆபத்து வரம்பாகும், முக்கியமான அடையாளங்களுக்கு பொதுவாக 1% அல்லது 0.01%.
- சமர்ப்பித்து பாருங்கள்: அந்த எண்ணிக்கையில் உங்கள் உண்மையான மோதல் நிகழ்தகவு, உங்கள் இலக்கு ஆபத்தை அடைவதற்கு முன் நீங்கள் உருவாக்கக்கூடிய ஐடிகளின் எண்ணிக்கை, பிறந்தநாள்-எல்லை குறிப்பு புள்ளி, மற்றும் பொதுவான அளவுகளில் வாய்ப்பு எவ்வாறு உயர்கிறது என்பதைக் காட்டும் ஒரு அட்டவணை.
தீர்க்கப்பட்ட உதாரணம்
நீங்கள் நிலையான UUIDv4 மதிப்புகளை உருவாக்குகிறீர்கள் என வைத்துக்கொள்வோம் (122 பிட் சீரற்ற தன்மை, அதாவது N = 2^122), மேலும் உங்கள் பயன்பாட்டின் காலப்போக்கில் 100 கோடி (n = 1,000,000,000) உருவாக்குவீர்கள் என எதிர்பார்க்கிறீர்கள்.
சூத்திரத்தில் பொருத்தினால்:
இது தோராயமாக 10.6 குவிண்டில்லியனில் 1 என்ற வாய்ப்பு — நடைமுறையில் பூஜ்ஜியம், அதனால்தான் UUIDv4 கிட்டத்தட்ட எந்தவொரு நிஜமான பணிச்சுமைக்கும் மோதல்-பாதுகாப்பானதாகக் கருதப்படுகிறது. இதை 6-இலக்க எண் OTP உடன் (N = 10^6, சுமார் 19.9 பிட்) ஒப்பிடுங்கள்: வெறும் 1,177 எண்ணை உருவாக்கினாலே 50% மோதல் எல்லையை கடந்துவிடும், அதனால்தான் OTP-கள் குறுகிய காலத்திற்கு மட்டுமே செல்லுபடியாகும் மற்றும் ஒரு பொதுவான உலகளாவிய குழுவிலிருந்து அல்லாமல் ஒரு நேரத்தில் ஒரு பயனருக்கு மட்டுமே வரையறுக்கப்பட்டவை.
பொதுவான ஐடி திட்டங்களும் அவற்றின் எண்ட்ரோபியும்
| திட்டம் | தோராயமான சீரற்ற பிட்கள் |
|---|---|
| UUIDv4 | 122 பிட் |
| ULID (சீரற்ற பகுதி) | 80 பிட் |
| UUIDv7 (சீரற்ற பகுதி) | 74 பிட் |
| 8-எழுத்து Base62 சரம் | ~47.6 பிட் |
| 6-இலக்க எண் குறியீடு (OTP) | ~19.9 பிட் |
வேறு எதற்கும் — வேறுபட்ட எழுத்துக்குறி/நீளம் கொண்ட nanoid, ஒரு எண் வரம்பு, அல்லது ஒரு உள் ஐடி வடிவம் — "Custom" விருப்பத்தைப் பயன்படுத்தி bits = log2(உங்கள் ஐடி இடத்தின் அளவு) ஐக் கணக்கிடவும்.