Heim  >  Artikel  >  php教程  >  php密保卡

php密保卡

PHP中文网
PHP中文网Original
2016-05-25 17:13:051081Durchsuche

1. [图片] 2.png               


php密保卡                  

2. [代码]密保卡入库 

		$this->load->model('admin/m_mibao');
		
		$data = array();	
		//生成随机横坐标
		$rand_str = $this->_rand_str(10);
		
		$arr   = array();
		for($k=0;$k<strlen($rand_str);$k++)
		{
			for ($i = 1;$i < 9;$i++)
			{			
				$rand = $this->_rand_num(3); 
				//赋给所有code的容器
				$arr[$rand_str{$k} . $i] =  $rand;
			}
		}

		$data[&#39;code&#39;]     = serialize($arr); //序列化后将信息入库
		$data[&#39;letter&#39;]   = $rand_str;
		
		//避免重复序列号
		while (TRUE)
		{
		        $data[&#39;card_num&#39;] = $this->_rand_num(20);
		        //判断序列号是否重复存在
			if($this->m_mibao->has_card_num($data[&#39;card_num&#39;]) == 0)
			{
				break;
			}
		}
		
		$data[&#39;add_time&#39;] = TIME;
		$data[&#39;user_id&#39;]  = $uid;
            
		echo $this->mibao->insert($data);

3. [代码]密保卡图片生成 

	//就是算坐标
        public function show($user_id)
	{
		$this->load->model(&#39;admin/m_mibao&#39;);
		$info = $this->m_mibao->get_by_uid($user_id);
		if(empty($info))
		{
			$this->msg(&#39;该用户无密保卡!&#39;,&#39;admin-index&#39;);
		}
		
		$codes = unserialize($info[&#39;code&#39;]);

		//图片初始值
		
		$bit = 3;  //密保卡位数
		
		$height = 332;    //图片高度
		
		$width =  626;    //图片宽度
		
		$im = imagecreatetruecolor($width,$height);
		
		$linecolor = imagecolorallocate($im, 229,229,229);
		
		$fontcolor = imagecolorallocate($im, 0, 0, 0);
		
		$top_rectangle_color = imagecolorallocate($im,241,254,237);
		
		$top_letter_color = imagecolorallocate($im,54,126,76);
		
		$left_rectangle_color = imagecolorallocate($im,243,247,255);
		
		$left_num_color = imagecolorallocate($im,4,68,192);
		
		$logo_str_color = imagecolorallocate($im,0,0,0);
		
		imagefill($im,0,0,imagecolorallocate($im,255,255,255));  //图片背景色
		
		$font    = &#39;./public/baomi/fonts/simsun.ttc&#39;;  //字体
		
		$font_en = &#39;./public/baomi/fonts/CONSOLA.TTF&#39;; //英文字体
		
		$font2   = &#39;./public/baomi/fonts/simhei.ttf&#39;; //密保卡上方黑体
		
		
		$dst = imagecreatefromjpeg("./public/baomi/120.jpg");
		
		
		
		imagecopymerge($im,$dst,120,15,0,0,193,55,100);
		
		imageline($im,10,72,$width-10,72,$linecolor);
		
		$ltext = "电子密保卡";
		
		if(!imagettftext($im,10,0,340,47,$logo_str_color,$font2,$ltext)) {
		    exit(&#39;error&#39;);   
		}
		
		//写入卡号
		
		$b = &#39;1000&#39; . $info[&#39;card_num&#39;];
		
		for($i=0;$i<7;$i++){
		
		    $p.= substr($b,3*$i,4). &#39; &#39;;
		
		}
		
		$x = 40; $y = 95; //序列号位置
		
		imagettftext($im,10,0,$x,$y,$color,$font,&#39;序列号&#39;);
		
		imagettftext($im,11,0,$x+50,$y,$color,$font_en,$p);
		
		//颜色框
		
		imagefilledrectangle($im,10,106,$width-10,128,$top_rectangle_color);
		
		imagefilledrectangle($im,10,129,65,$height-10,$left_rectangle_color);
		
		//写入最上排英文字母及竖线
		
		for($i=1;$i<=10;$i++){
		
		    $x = $i*55+35;      $y = 123;    $float_size = 11;   //字母位置参数               
		
		    imagettftext($im,$float_size,0,$x,$y,$top_letter_color,$font_en,$info[&#39;letter&#39;]{$i-1});//写入最上排英文字母
		
		}
		
		for($i=0;$i<=9;$i++){
		
		    $linex = $i*55+65;    $liney = 105;    $liney2 = $height-10;  //竖线位置参数
		
		    imageline($im,$linex,$liney,$linex,$liney2,$linecolor);//划入竖线
		
		}
		
		    
		
		//写入竖排数字及填入矩阵数据 划横线
		
		for($j=0;$j<8;$j++){
		
		    $jj=$j+1;
		
		    $x=35;  $y=($jj*24)+123; //左排数字及横线位置参数
		
		    imagettftext($im, $float_size, 0, $x, $y, $left_num_color, $font_en, $jj);//写入左排数字
		
		    for($i=1;$i<=10;$i++){
		
		        $float_size2=11;  $x = $i*55+27;  $sy=$y;  //填入矩阵数据位置参数
		
		       $s = $info[&#39;letter&#39;]{$i-1};
			   $s .= $j + 1;
		       imagettftext($im,$float_size2,0,$x,$sy,$fontcolor,$font_en,$codes[$s]);//写入矩阵数据
		
		    }
		}
		
		for($j=0;$j<10;$j++){
		
		    $line_x=10; $line_x2=$width-10;$y=$j*24+105; //横线位置参数 y坐标数据同上
		
		    imageline($im,$line_x,$y,$line_x2,$y,$linecolor);//划入横线
		
		}
		
		//外框边线
		
		imageline($im,10,10,$width-10,10,$linecolor);//横线
		
		//imageline($im,10,$height-10,$width-10,$height-10,$linecolor);
		
		imageline($im,10,10,10,$height-10,$linecolor);//竖线
		
		imageline($im,$width-10,10,$width-10,$height-10,$linecolor);
		
		//生成图片
		
		ob_clean();
		header("Content-type: image/jpeg");
		imagejpeg($im,null,100);
		imagedestroy($im);		
	}

4. [代码]密保卡验证 

	public function test1($uid)
	{
	
		$this->load->model(&#39;admin/m_users&#39;);		
		$user = $this->m_users->sel($uid);

		//post提交过来验证
		if($this->is_post())
		{
			$codes = $this->m_mibao->get_codes_by_uid($uid);
			$codes = unserialize($codes);

			$is_true = true;
			foreach($_SESSION[&#39;mibao&#39;][&#39;keys&#39;] as $key)
			{
				if($codes[$key] != $_POST[&#39;values&#39;][$key])
				{
					$is_true = false;
				}
			}
			
			if($is_true)
			{			
				die(&#39;正确&#39;);
			}
			else 
			{
				
				die(&#39;错误&#39;);
			}
		}
		else
		{
			//渲染视图
			$info = $this->m_mibao->get_by_uid($uid);
			$data = array();
			$data[&#39;keys&#39;] = $this->m_mibao->get_rand_keys($info[&#39;letter&#39;]);
			$_SESSION[&#39;mibao&#39;][&#39;keys&#39;] = $data[&#39;keys&#39;];
			$data[&#39;uid&#39;] = $uid;
			$this->load->view(&#39;test1&#39;,$data);
		}

                   


                   

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn