PDA

View Full Version : ایجاد کد رهگیری برای هر رکورد



hamidhassas
پنج شنبه 10 اسفند 1391, 20:21 عصر
ایجاد کد رهگیری برای کاربران را میخوام به صورت زیر انجام بدم
من از کد زیر که یک captcha هست استفاده میکنم می خوام کاری کنم به جای اینکه captcha به صورت عکس فرا خوانی بشه به صورت یک متن در داخل یک تکس باک قرار بگیره و این مقدار را داخل دیتا بیس ذخیره کنم تا کاربر با وارد کردن آن در بخش لاگین بتونه رکورد خودش رو ببینه حالا باید چکار کنم که مقدار ها به جای اینکه به صورت عکس فراخوانی بشه به صورت یک متن فرا خوانی بشه و همینطور بجای اینکه عدد باشه عدد و حروف باشه؟



<?php
session_start();
$string = '';
for ($i = 0; $i < 10; $i++) {
// this numbers refer to numbers of the ascii table (lower case)
$string .= chr(rand(48, 57));
}
$_SESSION['randum_code'] = $string;
$dir = 'Fonts/';
$image = imagecreatetruecolor(150, 25);
$black = imagecolorallocate($image, 0, 0, 0);
$color = imagecolorallocate($image, 100, 100, 90);
$white = imagecolorallocate($image, 237, 237, 237);
imagefilledrectangle($image,0,0,399,99,$white);
imagettftext ($image, 12, 0, 0, 20, $color, $dir."acmesai.TTF", $_SESSION['randum_code']);
header("Content-type: image/png");
imagepng($image);
?>

siavashsay
پنج شنبه 10 اسفند 1391, 20:37 عصر
خوب دوست عزیز میتونید همون قسمت کدی که کد مورد نظر رو تولید میکنه رو انتخاب - اجرا و عملیات رو روش پیاده سازی کنید :

$string = '';
for ($i = 0; $i < 10; $i++) {
// this numbers refer to numbers of the ascii table (lower case)
$string .= chr(rand(48, 57));
}

// NOw use $string for DB or echo to your user !
echo $string;
و یا اینکه اگر میخواین هم از عکس اون و هم از متن اون استفاده کنید در اینجا از متغیر
$_SESSION['random_code'] استفاده کنید و اونو داخل دیتابیس بریزید یا نشون بدید و ای هر چی دیگه

AbiriAmir
پنج شنبه 10 اسفند 1391, 22:06 عصر
دوست عزیز کد رهگیری رو باید توسط 1 الگوریتم تولید کنید...
که بتونید چیزای بدردبخوری رو از توی کد رهگیری بکشید بیرون... و مهمتر از اون تکراری نشه...
کسی از کد رندوم به عنوان کد رهگیری استفاده نمیکنه!
بعدشم نیازی نیست اینو توی تکست باکس وارد کنید...
کد رهگیری که قبل از سابمیت شدن تولید نمیشه!
بعد از این که سابمیت کرد اطلاعات رو، قبل از درج کردن در دیتابیس شما کد رو تولید و توی دیتابیست درج کن

hamidhassas
جمعه 11 اسفند 1391, 01:01 صبح
ممنون siavashsay
این کد زیر چطوره مال شماست siavashsay
تابع for میاد 4 تا کاراکتر رو به صورت حروف بزرگ بهت میده ! ( اگه خواستی میتونی تعداد کاراکترها رو از 4 به 6 یا هرچقدر میخوای تغییر بدی )
بعد توسط تابع time یک عدد غیر قابل تکرار رو درست میکنیم و در اخر اونها رو بهم میچسبونیم !


function codeGen(){
$words ='';
$nums = '';
for ($i = 0; $i < 4; $i++)
{
$words .= strtoupper(chr(rand(97, 122)));
}
$nums=time();
$code=$words.$nums;
return $code;
}

راستی اطلاعات این کد رو چطوری نمایش بدم


کد زیر هم هست کدومشون بهتر کد بالا یا پایین


function randomChar($max=8 , $salt='')
{
$max = (int) $max ;
$str = $salt . time() . mt_rand(1,80). $salt . $_SERVER['REMOTE_ADDR'] .microtime(true);
$random = md5($str);
for(;;)
{
$random .= md5($random);
if(strlen($random) >= $max)
break;
}
return substr($random , 1 , $max);
}

siavashsay
جمعه 11 اسفند 1391, 14:37 عصر
راستی اطلاعات این کد رو چطوری نمایش بدم
به اینصورت :

$code=codeGen();
echo $code;
فرقی نمیکنه - کدی پایینی یه خورده پیچیده تره اما هر 2 یک کار رو میکنن :)
موفق باشید