मैं निम्नलिखित गुणों के साथ एक पर्ल स्ट्रिंग चेकसम समारोह के लिए देख रहा हूँ:0..2^32-1 रेंज में पर्ल पैदा मूल्यों में एक त्वरित स्ट्रिंग चेकसम समारोह
- इनपुट: अपरिभाषित के यूनिकोड स्ट्रिंग लंबाई (
$string
) - आउटपुट: अहस्ताक्षरित पूर्णांक (
$hash
), जिसके लिए0 <= $hash <= 2^32-1
रखती
छद्म कोड (0 4294967295, एक 4-बाइट MySQL अहस्ताक्षरित int के आकार मिलान करने के लिए):
sub checksum {
my $string = shift;
my $hash;
... checksum logic goes here ...
die unless ($hash >= 0);
die unless ($hash <= 4_294_967_295);
return $hash;
}
आदर्श रूप में चेकसम समारोह को चलाने के लिए त्वरित किया जाना चाहिए और कुछ हद तक लक्ष्य अंतरिक्ष (0
.. 2^32-1
) टकराव से बचने के लिए समान रूप से मान उत्पन्न करनी चाहिए। इस एप्लिकेशन में यादृच्छिक टकराव पूरी तरह से घातक हैं, लेकिन जाहिर है, मैं उन हद तक उनसे बचना चाहता हूं कि यह संभव है।
इन आवश्यकताओं को देखते हुए, इसे हल करने का सबसे अच्छा तरीका क्या है?
आप सभी संभव तार के साथ टकराव से बचने के लिए, लेकिन केवल एक 4 अरब संभव है चाहता हूँ हज़म? एक पूर्णांक का उपयोग क्यों महत्वपूर्ण है? एमडी 5 की तरह कुछ इस्तेमाल करने के बारे में, भले ही आपको पच को स्ट्रिंग के रूप में स्टोर करना पड़े? –
"आप सभी संभावित तारों के साथ टकराव से बचना चाहते हैं" - नहीं, जैसा कि मैंने सवाल में कहा है, "बस उनसे बचाना चाहते हैं कि यह संभव है"। – knorv
"एक पूर्णांक का उपयोग क्यों महत्वपूर्ण है?" - जैसा कि सवाल में बताया गया है कि चेकसम "एक 4-बाइट MySQL हस्ताक्षरित int" में संग्रहीत किया जाएगा। – knorv