आम तौर पर अद्वितीय और यादृच्छिक दोनों तत्वों के साथ अनुक्रम उत्पन्न करना संभव नहीं है:स्पष्ट रूप से अद्वितीय होने के लिए एल्गोरिदम को अनुक्रम में पहले से उत्पन्न तत्वों को ध्यान में रखना होगा, इसलिए अगले वाले वास्तव में यादृच्छिक नहीं होंगे।
इसलिए आपकी सबसे अच्छी शर्त यह होगी कि आप टकरावों का पता लगाएं और फिर से प्रयास करें (जो आपके विशेष मामले में बहुत महंगा हो सकता है)।
यदि आप केवल 7 वर्णों तक सीमित हैं, तो आप ऊपर इतना कुछ नहीं कर सकते:
$allowed_chars = 'abcdefghijklmnopqrstuvwxz';
$allowed_count = strlen($allowed_chars);
$password = null;
$password_length = 7;
while($password === null || already_exists($password)) {
$password = '';
for($i = 0; $i < $password_length; ++$i) {
$password .= $allowed_chars{mt_rand(0, $allowed_count - 1)};
}
}
यह अंततः आपको एक नया पासवर्ड देना चाहिए।
हालांकि, इसी तरह के मामलों में मैंने सामना किया है, मैं आमतौर पर एक बड़ा पासवर्ड आकार चुनता हूं जो एक लोकप्रिय हैश फ़ंक्शन के हेक्स प्रतिनिधित्व का आकार भी होता है (उदाहरण के लिए md5
) तब आप इसे अपने लिए आसान और कम त्रुटि प्रवण बना सकते हैं:
$password = time(); // even better if you have some other "random" input to use here
do {
$password = md5(time().$password);
}
while (already_exists($password));
इसका अतिरिक्त लाभ यह भी है कि अनुक्रम स्थान बड़ा है, इसलिए कम टक्कर होगी। आप भविष्य में उत्पन्न होने वाले पासवर्ड की अपेक्षित संख्या के अनुसार हैश फ़ंक्शन का आकार चुन सकते हैं ताकि कम टकराव की संभावना "गारंटी" हो और इस प्रकार संभावित रूप से महंगे already_exists
को कम कॉल करें। समारोह।