PHP生成二维码与识别二维码的方法详解【附源码下载】


Posted in PHP onMarch 07, 2019

本文实例讲述了PHP生成二维码与识别二维码的方法。分享给大家供大家参考,具体如下:

二维码的分类

  • 线性堆叠式二维码
  • 矩阵式二维码

二维码的优缺点

优点

  • 信息容量大
  • 编码范围广
  • 容错能力强
  • 译码可靠性高
  • 可引入加密措施
  • 成本低,易制作

缺点

  • 二维码技术成为手机病毒、钓鱼网站传播的新渠道
  • 信息泄密

目前流行的三大国际标准

  • PDF417:不支持中文
  • DM:专利未公开,需支付专利费用
  • QR CODE:专利公开,支持中文

QR CODE 纠错能力

  • L级:约可纠错7%的数据码字
  • M级:约可纠错15%的数据码字
  • Q级:约可纠错25%的数据码字
  • H级:约可纠错30%的数据码字

前提条件

  • GD库

一、PHP生成QR CODE

  • 官网:http://phpqrcode.sourceforge.net/
  • 下载源码:https://github.com/endroid/qr-code

目录结构

PHP生成二维码与识别二维码的方法详解【附源码下载】

1、qrcode_create.php

ps:生成普通二维码

<?php
include_once "./qrcode/phpqrcode.php";
/**
 * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
 * 在浏览器上直接生成一个二维码(内容为abc)
 */
QRcode::png("abc");
QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);
/**
 * 生成文件到本地
 * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
 * PS:$saveandprint源码的p6参数做了修改
 */
QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);

2、qrcode_logo.php

ps:生成带Logo的二维码

<?php
/**
 * Created by PhpStorm.
 * User: user
 * Date: 2018/8/16
 * Time: 10:43
 */
include "./qrcode/phpqrcode.php";
$txt = "测试内容";
$picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
$level = 'L';
$size = 5;
$is_logo = 1;//是否包含Logo 0否 1是
$margin = 2;//边距
$saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true
//生成二维码图片QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);
if($is_logo == 1){
 $QR = $picPathAndName; //已经生成的原始二维码图
 $Logo = './pic/logo.png';
 $Logo_re = './pic/test_logo.png';
 $QR = imagecreatefromstring(file_get_contents($QR));
 $Logo = imagecreatefromstring(file_get_contents($Logo));
 $QR_width = imagesx($QR); //二维码图片宽度
 $QR_height = imagesy($QR); //二维码图片高度
 $logo_width = imagesx($Logo); //logo图片宽度
 $logo_height = imagesy($Logo); //logo图片高度
 $logo_qr_width = $QR_width / 5;
 $scale = $logo_width / $logo_qr_width;
 $logo_qr_height = $logo_height / $scale;
 $from_width = ($QR_width - $logo_qr_width) / 2;
 imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
 //输出图片
 imagepng($QR, $Logo_re);
}

3、qrcode_vcard.php (生成电子签名)

vCard格式:https://zh.wikipedia.org/wiki/VCard

<?php
/**
 * Created by PhpStorm.
 * User: user
 * Date: 2018/8/15
 * Time: 23:00
 */
require_once "./qrcode/phpqrcode.php";
/**
 * 生成电子签名
 * PS;使用微信扫描二维码
 */
$content = 'BEGIN:VCARD' . "\n";//起始标志
$content .= 'VERSION:2.1' . "\n";//当前版本
$content .= 'N:周' . "\n";//姓
$content .= 'FN:勇' . "\n";//名
$content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
$content .= 'TITLE:PHP研发程序员' . "\n";//职位
$content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
$content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
$content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
$content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
$content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
$content .= 'URL:www.baidu.com' . "\n";//个人主页
$content .= 'END:VCARD' . "\n";//结束标志
QRcode::png($content);

二、JQUERY生成QR CODE

源码地址:https://github.com/jeromeetienne/jquery-qrcode

jquery_create.php

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Jquery生成二维码</title>
 <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
 <script type="text/javascript" src="./jquery-qrcode/jquery.qrcode.min.js"></script>
</head>
<body>
<div id="qrcode"></div>
<script>
 //$('#qrcode').qrcode("this plugin is great");
 $('#qrcode').qrcode({width: 64,height: 64,text: "jason"});
</script>
</body>
</html>

三、PHP识别二维码

1、方法一

环境需求,安装如下扩展

  • - ImageMagick
  • - zbar
  • - php-zbarcode

2、方法二

PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以

qrReader类:https://github.com/baagee/php_QrReader

<?php
include_once('./qrReader/lib/QrReader.php');
$qrcode = new QrReader('./test_logo.png'); //图片路径
$text = $qrcode->text(); //返回识别后的文本
echo $text;
PHP 相关文章推荐
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
Feb 08 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
写php分页时出现的Fatal error的解决方法
Apr 18 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
详解PHP归并排序的实现
Oct 18 PHP
PHP验证码类ValidateCode解析
Jan 07 PHP
php使用crypt()函数进行加密
Jun 08 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
mac pecl 安装php7.1扩展教程
Oct 17 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 07 #PHP
php使用fullcalendar日历插件详解
Mar 06 #PHP
PHP封装XML和JSON格式数据接口操作示例
Mar 06 #PHP
浅谈PHP封装CURL
Mar 06 #PHP
Yaf框架封装的MySQL数据库操作示例
Mar 06 #PHP
PHP实现的敏感词过滤方法示例
Mar 06 #PHP
详解PHP 二维数组排序保持键名不变
Mar 06 #PHP
You might like
如何选购合适的收音机
2021/03/01 无线电
什么是短波收听SWL
2021/03/01 无线电
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
jQuery实现文档树效果
2017/02/20 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
python算法演练_One Rule 算法(详解)
2017/05/17 Python
Python批量查询域名是否被注册过
2017/06/21 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
Django多数据库联用实现方法解析
2020/11/12 Python
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
临床医学大学生求职信
2013/09/28 职场文书
员工评语大全
2014/01/19 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
入党心得体会
2019/06/20 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
Python作用域和名称空间的详细介绍
2022/04/13 Python