热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用PHP实现密保卡功能

密保卡入库$this-load-model('admin/m_mibao');$data=array();//生成随机横坐标$rand_str=$this-_rand_str(10);$arr=array();for($k=0;$kstrlen($rand_str);

   

\

  密保卡入库

  1. $this->load->model('admin/m_mibao'); 
  2.  
  3. $data = array();     
  4. //生成随机横坐标 
  5. $rand_str = $this->_rand_str(10); 
  6.  
  7. $arr   = array(); 
  8. for($k=0;$k<strlen($rand_str);$k++) 
  9.     for ($i = 1;$i < 9;$i++) 
  10.     {            
  11.         $rand = $this->_rand_num(3);  
  12.         //赋给所有code的容器 
  13.         $arr[$rand_str{$k} . $i] =  $rand
  14.     } 
  15.  
  16. $data['code']     = serialize($arr); //序列化后将信息入库 
  17. $data['letter']   = $rand_str
  18.  
  19. //避免重复序列号 
  20. while (TRUE) 
  21.         $data['card_num'] = $this->_rand_num(20); 
  22.         //判断序列号是否重复存在 
  23.     if($this->m_mibao->has_card_num($data['card_num']) == 0) 
  24.     { 
  25.         break
  26.     } 
  27.  
  28. $data['add_time'] = TIME; 
  29. $data['user_id']  = $uid
  30.            
  31. echo $this->mibao->insert($data); 

 

 

  密保卡图片生成

  1. //就是算坐标 
  2.        public function show($user_id
  3.     $this->load->model('admin/m_mibao'); 
  4.     $info = $this->m_mibao->get_by_uid($user_id); 
  5.     if(emptyempty($info)) 
  6.     { 
  7.         $this->msg('该用户无密保卡!','admin-index'); 
  8.     } 
  9.      
  10.     $codes = unserialize($info['code']); 
  11.  
  12.     //图片初始值 
  13.      
  14.     $bit = 3;  //密保卡位数 
  15.      
  16.     $height = 332;    //图片高度 
  17.      
  18.     $width =  626;    //图片宽度 
  19.      
  20.     $im = imagecreatetruecolor($width,$height); 
  21.      
  22.     $linecolor = imagecolorallocate($im, 229,229,229); 
  23.      
  24.     $fontcolor = imagecolorallocate($im, 0, 0, 0); 
  25.      
  26.     $top_rectangle_color = imagecolorallocate($im,241,254,237); 
  27.      
  28.     $top_letter_color = imagecolorallocate($im,54,126,76); 
  29.      
  30.     $left_rectangle_color = imagecolorallocate($im,243,247,255); 
  31.      
  32.     $left_num_color = imagecolorallocate($im,4,68,192); 
  33.      
  34.     $logo_str_color = imagecolorallocate($im,0,0,0); 
  35.      
  36.     imagefill($im,0,0,imagecolorallocate($im,255,255,255));  //图片背景色 
  37.      
  38.     $font    = './public/baomi/fonts/simsun.ttc';  //字体 
  39.      
  40.     $font_en = './public/baomi/fonts/CONSOLA.TTF'//英文字体 
  41.      
  42.     $font2   = './public/baomi/fonts/simhei.ttf'//密保卡上方黑体 
  43.      
  44.      
  45.     $dst = imagecreatefromjpeg("./public/baomi/120.jpg"); 
  46.      
  47.      
  48.      
  49.     imagecopymerge($im,$dst,120,15,0,0,193,55,100); 
  50.      
  51.     imageline($im,10,72,$width-10,72,$linecolor); 
  52.      
  53.     $ltext = "电子密保卡"
  54.      
  55.     if(!imagettftext($im,10,0,340,47,$logo_str_color,$font2,$ltext)) { 
  56.         exit('error');    
  57.     } 
  58.      
  59.     //写入卡号 
  60.      
  61.     $b = '1000' . $info['card_num']; 
  62.      
  63.     for($i=0;$i<7;$i++){ 
  64.      
  65.         $p.= substr($b,3*$i,4). ' '
  66.      
  67.     } 
  68.      
  69.     $x = 40; $y = 95; //序列号位置 
  70.      
  71.     imagettftext($im,10,0,$x,$y,$color,$font,'序列号'); 
  72.      
  73.     imagettftext($im,11,0,$x+50,$y,$color,$font_en,$p); 
  74.      
  75.     //颜色框 
  76.      
  77.     imagefilledrectangle($im,10,106,$width-10,128,$top_rectangle_color); 
  78.      
  79.     imagefilledrectangle($im,10,129,65,$height-10,$left_rectangle_color); 
  80.      
  81.     //写入最上排英文字母及竖线 
  82.      
  83.     for($i=1;$i<=10;$i++){ 
  84.      
  85.         $x = $i*55+35;      $y = 123;    $float_size = 11;   //字母位置参数                
  86.      
  87.         imagettftext($im,$float_size,0,$x,$y,$top_letter_color,$font_en,$info['letter']{$i-1});//写入最上排英文字母 
  88.      
  89.     } 
  90.      
  91.     for($i=0;$i<=9;$i++){ 
  92.      
  93.         $linex = $i*55+65;    $liney = 105;    $liney2 = $height-10;  //竖线位置参数 
  94.      
  95.         imageline($im,$linex,$liney,$linex,$liney2,$linecolor);//划入竖线 
  96.      
  97.     } 
  98.      
  99.          
  100.      
  101.     //写入竖排数字及填入矩阵数据 划横线 
  102.      
  103.     for($j=0;$j<8;$j++){ 
  104.      
  105.         $jj=$j+1; 
  106.      
  107.         $x=35;  $y=($jj*24)+123; //左排数字及横线位置参数 
  108.      
  109.         imagettftext($im$float_size, 0, $x$y$left_num_color$font_en$jj);//写入左排数字 
  110.      
  111.         for($i=1;$i<=10;$i++){ 
  112.      
  113.             $float_size2=11;  $x = $i*55+27;  $sy=$y;  //填入矩阵数据位置参数 
  114.      
  115.            $s = $info['letter']{$i-1}; 
  116.            $s .= $j + 1; 
  117.            imagettftext($im,$float_size2,0,$x,$sy,$fontcolor,$font_en,$codes[$s]);//写入矩阵数据 
  118.      
  119.         } 
  120.     } 
  121.      
  122.     for($j=0;$j<10;$j++){ 
  123.      
  124.         $line_x=10; $line_x2=$width-10;$y=$j*24+105; //横线位置参数 y坐标数据同上 
  125.      
  126.         imageline($im,$line_x,$y,$line_x2,$y,$linecolor);//划入横线 
  127.      
  128.     } 
  129.      
  130.     //外框边线 
  131.      
  132.     imageline($im,10,10,$width-10,10,$linecolor);//横线 
  133.      
  134.     //imageline($im,10,$height-10,$width-10,$height-10,$linecolor); 
  135.      
  136.     imageline($im,10,10,10,$height-10,$linecolor);//竖线 
  137.      
  138.     imageline($im,$width-10,10,$width-10,$height-10,$linecolor); 
  139.      
  140.     //生成图片 
  141.      
  142.     ob_clean(); 
  143.     header("Content-type: image/jpeg"); 
  144.     imagejpeg($im,null,100); 
  145.     imagedestroy($im);       

 

 

  密保卡验证

  1. public function test1($uid
  2.  
  3.     $this->load->model('admin/m_users');         
  4.     $user = $this->m_users->sel($uid); 
  5.  
  6.     //post提交过来验证 
  7.     if($this->is_post()) 
  8.     { 
  9.         $codes = $this->m_mibao->get_codes_by_uid($uid); 
  10.         $codes = unserialize($codes); 
  11.  
  12.         $is_true = true; 
  13.         foreach($_SESSION['mibao']['keys'as $key
  14.         { 
  15.             if($codes[$key] != $_POST['values'][$key]) 
  16.             { 
  17.                 $is_true = false; 
  18.             } 
  19.         } 
  20.          
  21.         if($is_true
  22.         {            
  23.             die('正确'); 
  24.         } 
  25.         else  
  26.         { 
  27.              
  28.             die('错误'); 
  29.         } 
  30.     } 
  31.     else 
  32.     { 
  33.         //渲染视图 
  34.         $info = $this->m_mibao->get_by_uid($uid); 
  35.         $data = array(); 
  36.         $data['keys'] = $this->m_mibao->get_rand_keys($info['letter']); 
  37.         $_SESSION['mibao']['keys'] = $data['keys']; 
  38.         $data['uid'] = $uid
  39.         $this->load->view('test1',$data); 
  40.     } 

 

 


推荐阅读
  • 求助高手:下载的压缩包中包含CMake文件,如何在Windows环境下使用已安装的CMake GUI进行运行?
    从GitHub仓库 `https://github.com/vonmax007/RobotSimulation` 下载的代码包含多种算法,其中算法1的文件目录中包含了CMake文件。为了在Windows环境下使用已安装的CMake GUI运行这些文件,需要先确保CMake已正确安装,并按照以下步骤操作:打开CMake GUI,设置源代码路径和构建路径,点击“Configure”配置项目,然后点击“Generate”生成构建文件。最后,在生成的构建目录中使用命令行或IDE进行编译和运行。 ... [详细]
  • 字节跳动青训营:Go语言进阶培训与依赖管理深入解析
    本文详细探讨了字节跳动青训营中关于Go语言进阶培训的核心内容,重点讲解了并行与并发的区别、Goroutine的使用、CSP模型及Channel机制在并发安全中的应用,并介绍了LockWithGroup的实现方式。此外,文章还深入解析了Go语言的依赖管理机制,包括GoPath、GoVendor和GoModule的使用方法及其在依赖分发和回源过程中的作用。 ... [详细]
  • 我正在使用 Ruby on Rails 构建个人网站。总体而言,RoR 是一个非常出色的工具,它提供了丰富的功能和灵活性,使得创建自定义页面变得既高效又便捷。通过利用其强大的框架和模块化设计,我可以轻松实现复杂的功能,同时保持代码的整洁和可维护性。此外,Rails 的社区支持也非常强大,为开发过程中遇到的问题提供了丰富的资源和解决方案。 ... [详细]
  • 开发日志:磁盘读取技术详解——CHS模式的应用与解析
    开发日志:磁盘读取技术详解——CHS模式的应用与解析 ... [详细]
  • 深入浅出:前端开发中的JavaScript基础入门
    JavaScript,作为前端开发的核心技术之一,与HTML和CSS并称为Web开发的三大基石。尽管其名称与Java相似,但实际上两者并无直接关联,JavaScript是一门独立的编程语言,与Python、Go和C++等语言一样具有独特的语法和特性。本文将从基础入手,详细介绍JavaScript的基本概念、语法结构及其在现代Web开发中的应用。 ... [详细]
  • GoCD 创建管道时遇到 422 错误:权限不足问题分析与解决
    在 GoCD 创建管道时遇到 422 错误,通常是因为反向代理配置不正确,特别是缺少必要的头部信息。具体来说,需要确保在反向代理配置中添加 `proxy_set_header Host $host;` 和 `proxy_set_header X-Real-IP $remote_addr;` 等关键指令,以确保 GoCD 能够正确识别请求来源并进行权限验证。通过调整这些配置,可以有效解决权限不足的问题,确保管道创建过程顺利进行。 ... [详细]
  • 池子比率:BSV 区块链上的去中心化金融应用——Uniswap 分析
    池子比率:BSV 区块链上的去中心化金融应用——Uniswap 分析 ... [详细]
  • Sapphire 测试网上线:首个支持 EVM 的隐私 ParaTime 环境
    Sapphire 测试网上线:首个支持 EVM 的隐私 ParaTime 环境 ... [详细]
  • jQuery Flot 数据可视化插件:高效绘制图表的专业工具
    jQuery Flot 是一款高效的数据可视化插件,专为绘制各种图表而设计。该工具支持丰富的图表类型和自定义选项,适用于多种应用场景。用户可以通过其官方网站获取示例代码和下载资源,以便快速上手和使用。 ... [详细]
  • 理工科男女不容错过的神奇资源网站
    十一长假即将结束,你的假期学习计划进展如何?无论你是在家中、思念家乡,还是身处异国他乡,理工科学生都不容错过一些神奇的资源网站。这些网站提供了丰富的学术资料、实验数据和技术文档,能够帮助你在假期中高效学习和提升专业技能。 ... [详细]
  • 在运行时动态获取Entity Framework中的ObjectSet可以通过反射机制实现。这种方法允许开发者在应用程序运行期间根据需要加载不同的实体集合,从而提高代码的灵活性和可扩展性。通过使用`DbContext`类的`Set`方法,结合类型信息,可以轻松地实现这一目标。此外,还可以利用`Type`对象和泛型方法来进一步增强动态性,确保在处理多种实体类型时更加高效和安全。 ... [详细]
  • 深入解析经典卷积神经网络及其实现代码
    深入解析经典卷积神经网络及其实现代码 ... [详细]
  • 在 DevCon 4 上,演讲者深入探讨了 Serenity 中的点对点网络架构。该演讲详细解析了 Serenity 网络协议的设计原理与实现细节,涵盖了节点发现、数据传输及安全性等方面的关键技术。通过丰富的案例和图表,演讲者全面展示了 Serenity 网络的高效性和可靠性。 ... [详细]
  • 本文探讨了如何在 Google Sheets 中通过自定义函数实现 AJAX 调用。具体介绍了编写脚本的方法,以便在电子表格中发起 AJAX 请求,从而实现数据的动态获取与更新。这种方法不仅简化了数据处理流程,还提高了工作效率。 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
author-avatar
噬血--男爵_380_203
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有