2012-01-05 16 views
6

कहता है कि अगर मैं अपनी साइट पर पंजीकृत प्रत्येक उपयोगकर्ता को एक अद्वितीय आईडी देना चाहता हूं। ऐसा लगता है कि अगर मैं ऐसा करना चाहता था तो मुझे यह करना होगा: आईडी के लिए यादृच्छिक संख्या बनाएं, यह देखने के लिए जांचें कि क्या आईडी पहले से मौजूद है, यदि यह मौजूद है, तो यह एक और यादृच्छिक संख्या बनाएं और अभी तक एक और क्वेरी भेजें यह देखने के लिए कि क्या मौजूद है, और इसी तरह ...PHP और mySQL (i): यादृच्छिक उपयोगकर्ता आईडी कैसे उत्पन्न करें?

यह उम्र के लिए जा सकता है। वृद्धिशील आईडी होने के अलावा, क्या ऐसा करने का कोई अच्छा तरीका है?

+2

क्यों नहीं बस एक autoincrement फ़ील्ड का उपयोग है? क्या उपयोगकर्ताओं को वास्तव में आवश्यकता है (या देखभाल) कि उनके पास कुछ जटिल हैश है जो उन्हें पहचानता है, खासकर अगर ऐसा कुछ है जिसे उन्हें कभी देखने की ज़रूरत नहीं है? –

+0

अपनी प्राथमिक कुंजी के रूप में एक ऑटोइनक्रिकमेंट फ़ील्ड का उपयोग करें। यह सब कुछ है जो सब करता है। – dqhendricks

+0

अच्छी तरह से यूआरएल में इस्तेमाल किया जाएगा जैसे id = ##### और मैं साहसी होना चाहता था :-) –

उत्तर

2

ऐसा करने का सबसे अच्छा तरीका ऑटो वृद्धि फ़ंक्शन के माध्यम से है, यदि आप वास्तव में फ़ंक्शन का उपयोग नहीं करना चाहते हैं तो आप uniqid() का उपयोग कर सकते हैं;

असल में आप मिलीसेकंड के आधार पर एक अद्वितीय आईडी उत्पन्न करते हैं, यदि आप फ़ंक्शन में एक अनूठा उपसर्ग डालते हैं तो यह एक बहुत ही अद्वितीय आईडी उत्पन्न करेगा।

echo uniqid('prefix'); 

इस तरह आपको आईडी उत्पन्न करने के बाद जांचना नहीं होगा, अगर यह पहले से मौजूद है या नहीं। आप सुनिश्चित कर सकते हैं कि यह अद्वितीय है।

अधिक जानकारी के लिए इस यूआरएल http://php.net/uniqid की जांच करें!

+1

+1 यूएनआईक्यूआईडी टक्कर उत्पन्न करने के लिए बहुत ही असंभव है। –

+0

अगर कोई एक ही समय में पंजीकरण करना चाहता था, तो क्या मैं नहीं खराब हो?; पी lol –

+1

नहीं, बस यादृच्छिक उपसर्ग का उपयोग करें, उदाहरण के लिए: uniqid (rand(), true)। यह असंभव है कि यह होगा! – Wesley

0

यदि आपके पास 15 नंबरों की एक स्ट्रिंग है तो आप 999 ट्रिलियन तक देख रहे हैं, मुझे संदेह है कि यह ग्रह पर लगभग 7 बिलियन लोगों के विचार पर "उम्र" के लिए दौड़ जाएगा।

+0

मुझे लगता है कि आप मतलब अरबों लोग, ट्रिलियन नहीं। –

+1

हाहा, मैं ट्रिलियन में इतना पकड़ा गया - धन्यवाद! संपादित – Michael

1

आप rand() फ़ंक्शन का उपयोग कर सकते हैं। यह दो के बीच एक यादृच्छिक संख्या उत्पन्न करेगा।

rand(0000,9999) 

यह 0 और 9999

के बीच यह जांचने के लिए यह पहले से मौजूद एक संख्या उत्पन्न करेगा:

$id = rand(0000,9999); 

/* CREATE YOUR MYSQL CONNECTION */ 
$user_list = mysql_query("SELECT * FROM users"); 
while ($user = mysql_fetch_array($user_list)) 
{ 
    if ($id == $user['id']) 
    { 
     echo('Already exist.'); 
    } 
    else 
    { 
     /* YOUR CODE */ 
    } 
} 

यह रास्ता मैंने किया है ...

+0

इसके बजाय आप 'mt_rand' का उपयोग कर बेहतर हैं; अधिक यादृच्छिकता वाले संख्याओं के लिए और यह भी तेज है – Matthew

+1

उसे अद्वितीय होने के लिए उपयोगकर्ता आईडी की आवश्यकता है। आपको यह दिखाने के लिए अपना जवाब अपडेट करना चाहिए कि यह कैसे किया जा सकता है। –

+0

दरअसल, लेकिन रैंड() का उपयोग करना आसान है ... मुझे लगता है ... मुझे यह फ़ंक्शन पता है क्योंकि मैं इसे अपने ब्लॉग आईडी के लिए उपयोग करता हूं ... –

1

पहले सब, मैं टिप्पणियों से सहमत हूं। यह सब ओवरहेड कोड है, और यदि आप इसे दिलचस्प लगने के लिए इसका उपयोग कर रहे हैं तो आपको वास्तव में अपनी प्राथमिकताओं पर पुनर्विचार करना चाहिए।

लेकिन, अगर आपको अभी भी इसकी आवश्यकता है; यहाँ एक छोटे से कुछ है: यादृच्छिक संख्या का एक बहुत uniqueid के लिए एक टोकन बनाने के लिए पैदा

function uid() { 
    mt_srand((double)microtime()*1000000); 
    $token = mt_rand(1, mt_getrandmax()); 

    $uid = uniqid(md5($token), true); 
    if($uid != false && $uid != '' && $uid != NULL) { 
     $out = sha1($uid); 
     return $out; 
    } else { 
     return false; 
    } 
} 

मूल रूप से, यह होता है, और उसके बाद शा कि है। शायद ओवरहेड, लेकिन आप यह सुनिश्चित कर सकते हैं कि आप कभी भी डबल यूआईडी उत्पन्न नहीं करते हैं।

फैबियन।

+0

मैंने आपके कोड की कोशिश की है और यह 40 वर्ण (शायद हमेशा) उत्पन्न करेगा। अगर मैं केवल 15 या 20 अक्षर उत्पन्न करना चाहता हूं? – RiefSapthana

0

क्या आईडी को संख्यात्मक होना चाहिए? वर्णमाला वर्णों पर स्विच करके आपको लॉट अधिक एन्ट्रॉपी मिलेगी। एक 6 अंकों की संख्या 1,000,000 संभावनाएं हैं, एक 6 वर्ण अल्फान्यूमेरिक स्ट्रिंग 2,176,782,336 संभावनाएं हैं। इसे मिश्रित केस अल्फान्यूमेरिक बनाएं और यह 15,625,000,000 तक पहुंच जाए।

$chars = 'abcdefghijklmnopqrstuvwrxyzABCDEFGHIJKLMNOPQRSTUVWRXYZ'; 
mt_srand((double)microtime()*1000000); 

$id = ''; 
do { 
    $id .= $chars[mt_rand(0, strlen($chars) - 1)]; 
} while (isIdTaken($id)); 

var_dump($id); 

आप आईडी की इस शैली के साथ मदों की एक बहुत बनाने के लिए इससे पहले कि आप अधिक से अधिक 3 करने के लिए मिल जाएगा:

यहाँ कैसे मैं आमतौर पर अद्वितीय तार कि यथासंभव कम कर रहे हैं उत्पन्न है या 4 अक्षर।

0

मैं जानता हूँ कि यह इस उत्तर के लिए देर हो चुकी है, लेकिन सबसे आसान समाधान यादृच्छिक संख्या उत्पन्न करने के लिए है और यकीन है कि यह अनूठा होगा 100%

$uid = uniqid().date("Ymdhhis"); 
संबंधित मुद्दे