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 相关文章推荐
php去除换行符的方法小结(PHP_EOL变量的使用)
Feb 16 PHP
浅析is_writable的php实现
Jun 18 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
Jan 12 PHP
php动态生成函数示例
Mar 21 PHP
php导出CSV抽象类实例
Sep 24 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
PHP使用token防止表单重复提交的方法
Apr 07 PHP
PHP如何实现跨域
May 30 PHP
CentOS 上搭建 PHP7 开发测试环境
Feb 26 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
PHP扩展Swoole实现实时异步任务队列示例
Apr 13 PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 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
PHP中的float类型使用说明
2010/07/27 PHP
php分页示例分享
2014/04/30 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
js动态切换图片的方法
2015/01/20 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
Python爬豆瓣电影实例
2018/02/23 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
Python基本socket通信控制操作示例
2019/01/30 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
Django密码系统实现过程详解
2019/07/19 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
专升本个人自我评价
2013/12/22 职场文书
遗产继承公证书
2014/04/09 职场文书
导游欢迎词范文
2015/01/23 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
python内置进制转换函数的操作
2021/06/02 Python
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL
Python基本的内置数据类型及使用方法
2022/04/13 Python
Elasticsearch 聚合查询和排序
2022/04/19 Python