ساخت پسورد تصادفی

وضعیت
موضوع بسته شده است.

Masoud1365

مدیر انجمن
با سلام
چنتا از بچه ها این سوال رو پرسیدند که چطوری پسوردهای تصادفی و ... بسازیم که به صورت فقط عددی نباشه و هم عدد باشه و هم کاراکتر و ... وقتی چند نفر اینو پرسیدند ما را بر آن داشت تا این تاپیک رو بزنیم :green:

در این قسمت برای این که کار ساده باشه من یه تابع خیلی ساده مینویسم که بازگشتی هست و مقدار بازگشتی همون پسورد تصادفی ما هست ! البته با کمی تغئیر بهتر هم میشه که دیگه خودتون زحمتشو میتونید بکشید !
خب بریم سر کدها !
PHP:
    function _generatePassword($len = 12){
        $newpass = null;
        $pass_char = array('1','2','3','4','5','6','7','8','9',
        'a','b','c','d','e','f','g','h','i','j','k','l','m','n',
        'O','P','Q','R','S','Z','z','A','B','C','M','N','o','p',
        't','u','v','!','#','@','%','^','%',')','(','.','&','*');
        shuffle($pass_char);
        for($i=0;$i<$len;$i++){
            $newpass .= $pass_char[$i];
        }
        return $newpass;
    }
این از تابع ! کلا به نظرم خیلی واضح هست ولی یه توضیحی میدم :wink:
این تابع یه آرگومان میگیره که به صورت پیشفرض روی 12 تنظیم شده و این متغیر برابر است با تعداد کاراکتر پسورد ما !
یه متغیر $newpass داریم که پسورد ما در این متغیر ذخیره میشه که یه مقدار خالی بهش میدیم.
یک متغیر به نام $pass_char داریم که این متغیر برابر است با حروف و اعداد یا کاراکترهایی که ما میخواهیم در پسورد ما باشد ( مثلا ممکن است بخواهیم پسورد ما فقط حروف کوچک باشد یا فقط بزرگ باشد یا کاراکترهای خاصی داشته باشد که در اینجا من یه سری کاراکتر+اعداد+حروف کوچیک و بزرگ رو نوشتم )
یک تابعی استفاده کردیم به نام shuffle ! خب کار این تابع به این صورت هست که میاد و آرایه ما رو بهم میریزه البته مقادیر رو بهم میریزه و کلید آرایه ما از همون 0 شروع میشه و میره بالا !
در آخر هم با یک حلقه به مقدار لازم کاراکتر جدا میکنیم از آرایه و میچسبونیم به هم دیگه اینم میشه یک پسورد تصادفی !
اگر سوالی بود در خدمتیم :wink:
موفق باشید.
 

Milad

Well-Known Member
مسعود اگر یک عدد تصادفی انتخاب کنیم ، هش کنیم بعد یک قسمتی ازش رو ببریم جالب نیست ؟ البته به قدرت این نمیشه !
 
آخرین ویرایش:

Masoud1365

مدیر انجمن
مسعود اگر یک عدد تصادفی انتخاب کنیم ، هش کنیم بعد یک قسمتی ازش رو ببریم جالب نیست ؟ البته به قدرت این نمیشه !
اونجوری هم میشه ! ولی چنتا مسئله هست !
اینجوری که من نوشتم مزایایی که داره اینه که با یکمی تغئیر کد میشه تعریف کرد که کدی که ساخته میشه فقط عدد باشه یا حروف کوچیک باشه یا حروف بزرگ یا یه سری کاراکترهای خاص یا مثلا فقط دوتا از این ها ( مثل ساخت پسوردی که تو cpanel ) هست !
اونجوری که شما میگید یکمی پیچیده میشه و یکمی هم غیر قابل انعطاف :wink:
 

Jim Jim

Well-Known Member
خوب من می خوام از این طریق یه کد مثلا همین 12 رقمی، در یکی از سطرهای جدولم ایجاد کنم
و بعد این مقدار ایجاد شده در جایی از صفحه فراخوانی بشه

این کد رو گذاشتم...
حالا برای ثبتش در دیتابیس باید یه این صورت عمل بشه؟

PHP:
	$qry = "INSERT INTO table(newpass) VALUES('$newpass')";
	$result = @mysql_query($qry);

بعد بخوام این مقدار رو در صفحه فراخوانی کنم چطور؟
 

farik

Well-Known Member
باسلام..
ممنون مسعود جان ولی اگه از تابعی مثل rand به جای $i در$pass_char[$i]; استفاده میکردین باعث میشد که رشته های تولید شده توط تابع برای اندازه های یکسان هر دفعه فرق کنه..
@جیم جیم: ...خوب منظورتون از فراخوانی چیه؟ یعنی بخواین رکوردش رو بگیرین از دیتا بیس که خوب یک select ساده هست..
موفق باشید...
 

Jim Jim

Well-Known Member
چند تا فیلد در صفحه هست که وقتی کاربر این ها رو تکمیل میکنه و ارسال می کنه، می خوام یه کد مثلا 12 رقمی هم در دیتابیس بصورت اتوماتیک براش ایجاد بشه
و یعد در صفحه ای دیگه اون کد 12 رقمی رو بتونم نمایش یدم
 

farik

Well-Known Member
باسلام..
خوب اگه منظورتون چیزی تو مایه های کد رهگیری هست..خوب این روش مناسبی شاید نباشه..چون به هر حال ممکنه که دوتا عدد مثل هم بده(اگرچه میشه کاری کرد که احتمالش خیلی کم بشه)...من خودم اگه بخوام راحت ترین روش رو پیشنها بدم استفاده از تابع time هست...مثلا شما میتونین time رو هش کنین و اونو تو دیتابیس ذخیره کنین..
راستی ممنون میشم که سوالهایی که خیلی ارتباطی به تاپیک نداره رو در تاپیک های دیگه مطرح کنین...
موفق باشید..
 

Masoud1365

مدیر انجمن
ممنون مسعود جان ولی اگه از تابعی مثل rand به جای $i در$pass_char[$i]; استفاده میکردین باعث میشد که رشته های تولید شده توط تابع برای اندازه های یکسان هر دفعه فرق کنه..
زمانی که قبلش از تابع shuffle استفاده میکنیم کل مقادیر آرایه رو بهم میریزه ! بنا براین رشته هایی که هر دفعه ایجاد میشه تصادفی هست !
 

farik

Well-Known Member
باسلام..
ببخشید متوجه نشده بودم..اما بازم اینطوری همیشه مقادیر فرق میکنه و ممکن نیست دوبار مثلا a ظاهر بشه....
موفق باشید..
 

Masoud1365

مدیر انجمن
باسلام..
ببخشید متوجه نشده بودم..اما بازم اینطوری همیشه مقادیر فرق میکنه و ممکن نیست دوبار مثلا a ظاهر بشه....
موفق باشید..

منظورتو متوجه نشدم :green: !
اما اگر از این روش بخوائید برای کد هایی مثل کد رهگیری استفاده کنید باید بعد از درست شدن کد توی دیتا بیس یه سرچی بزنید که قبلا یه چنین کدی ساخته نشده باشه ! هر چند که احتمالش خیلی خیلی کمه ولی خب ممکنه !
 

farik

Well-Known Member
باسلام..
خوب میدونین شما میاین و کاراکترها رو بهم میریزین و بعد از اول به تعداد اندازه ای که میخواین میزارین کنار هم..خوب حالا اگه احتمالش هست که دو بار یک رشته رو بده(اگرچه این احتمال با زیاد شدن اندازه کم میشه...)اما به هر حال این یک ریسکه...واسه همین تو موارد حساسی مثل کد رهگیری من تابع time رو ترجیح میدم..(البته microtime):دی..
موفق باشید..
 

Masoud1365

مدیر انجمن
با استفاده از توابع تایم کد ما فقط عدد میشه مگر اینکه اونو هش کنیم که در این صورت کد طولانی میشه !
البته توی پست های قبل هم گفتم من از همین روش برای یه فروشگاه برای قسمت کد رهگیری استفاده کردم که بعدش از ساخته شدن کد یه سرچ توی دیتا بیس میزدم اگر که کد تکراری نبود به یه خرید تعلق میگرفت در غیر این صورت دوباره کد میساخت !
ولی در کل برای رسیدن به یک جواب هزار راه وجود داره :wink: ( البته من اینو بیشتر برای قسمت بازیابی رمز یا سیستمهای مشابه این نوشتم که بشه از یه سری کاراکتر غیر از عدد و حروف استفاده کرد ازش )
 

D.A.V.O.O.D

Member
سلام ،
مسعود جان ممنون بابت تابع خوبت :rose:

اينم من نوشتم ،‌اميدوارم كارآمد تر باشه ، و درست مثل cPanel‌ ميشه تعيين كرد كه پسورد از چه نوع كاراكتر هايي باشه .

PHP:
function make_random_string( $length = 10 , $has_capital = true , $has_lower = true , $has_number = true , $has_symbol = true )
{
    $cap_chars = array( 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' );
    $low_chars = array( 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' );
    $num = array( '0','1','2','3','4','5','6','7','8','9' );
    $symbol = array( '#','$','!','+','=','-','_','%','^','&','*','(',')' );
    
    $chars = array();
    if( $has_capital ) $chars = array_merge( $chars , $cap_chars );
    if( $has_lower ) $chars = array_merge( $chars , $low_chars );
    if( $has_number ) $chars = array_merge( $chars , $num );
    if( $has_symbol ) $chars = array_merge( $chars , $symbol );
    
    $l = count( $chars ) - 1;
    $random = '';
    
    for( $i = 0 ; $i < $length ; $i++ )
    {
        $j = rand( 0 , $l );
        $random .= $chars[$j];
    }
    return $random;
}

echo make_random_string();
موفق باشيد
 

tinya

Member
من که هر چی گشتم مورد مناسب ندیدم

اگر ممکنه لطف کنید یه نمونه که یه کد رهگیری 14 رقمی (فقط عدد) ایجاد کنه بذارید

چون یه موضوع تکراری هست نخواستم پست جدید بزنم
تو مباحث قبلی هم که نمی شد پاسخ ارسال کرد چون تاریخ هاشون قدیمی اند
گفتم شاید بهتر باشه اینجا مطرح کنم
 

D.A.V.O.O.D

Member
من که هر چی گشتم مورد مناسب ندیدم

اگر ممکنه لطف کنید یه نمونه که یه کد رهگیری 14 رقمی (فقط عدد) ایجاد کنه بذارید

چون یه موضوع تکراری هست نخواستم پست جدید بزنم
تو مباحث قبلی هم که نمی شد پاسخ ارسال کرد چون تاریخ هاشون قدیمی اند
گفتم شاید بهتر باشه اینجا مطرح کنم

سلام ،
با استفاده تايع موجود در پست فوق :
PHP:
echo make_random_string( 14 , false , false, true , false );

يا تابع جديد :
PHP:
function get_numeric_code( $length = 14 )
{
    $code = '';
    for( $i = 0 ; $i < $length ; $i++ )
    {
        $start = 0;
        if( $i == 0 ) $start = 1;
        $code .= rand( $start , 9 );
    }
    return $code;
}
echo get_numeric_code();
 

Masoud1365

مدیر انجمن
با سلام خدمت آقا داود !
کار خوبی کردی تابع کامل رو نوشتی ! من تابع رو ساده نوشته بودم واسه بچه ها ! میخواستم یکمی بهترش کنم که دیگه وقت نشد و زحمتش رو شما کشیدی بازم ممنون :rose:
 

tinya

Member
این تابع میاد مقدار ایجاد شده رو در همین صفحه نمایش میده

می خواستم این کد در دیتابیس ثبت بشه. باید تغییرش داد؟
 

tinya

Member
PHP:
$qry = "INSERT INTO books(name, login, pass, code) VALUES('$name','$login','$pass','$code')";

میشه رو این توضیح بدید چطوری این مقدار رو ثبت کنم؟
 

D.A.V.O.O.D

Member
PHP:
$qry = "INSERT INTO books(name, login, pass, code) VALUES('$name','$login','$pass','$code')";
میشه رو این توضیح بدید چطوری این مقدار رو ثبت کنم؟

سلام ،
شما مطمئن هستيد كه php را بلد هستيد‌؟
به نظرم قبل تمام اين كار ها شما بايد كامل php را ياد بگيريد و بعد بخواهيد چنين كاري كنيد !

اما من به شما كدي كه مي خواهيد را ميدم ، اميدوارم مشكلتون حل بشه .
PHP:
$pass = get_numeric_code();
$qry = "INSERT INTO `books` (`name`, `login`, `pass`, `code`) VALUES('$name','$login','$pass','$code')";

موفق باشيد
 
وضعیت
موضوع بسته شده است.

جدیدترین ارسال ها

بالا