管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。+ w+ {) |7 X2 K4 s9 G2 l
---------------------------------------------------------------------------------------------------# L9 v. \; g; ^6 q- T6 [, e
二维码的分类
G+ U$ f' o; b线性堆叠式二维码: ~; S' D- Q3 A0 l2 p5 r3 z
0 C7 t7 q4 _1 M5 r* l' J4 H ~4 Y矩阵式二维码' W/ x9 b B4 _ l) ]$ |
& R. O6 o; V+ I8 X4 Y# N6 [% o) t
二维码的优缺点- _! d" R9 m- ]
优点, [" q$ G, y' S6 j F9 E7 L
信息容量大8 a. z) I. W7 f2 p1 l/ I3 t
2 F! D2 H* m2 [- O v4 M2 z编码范围广; ^0 R4 n% |0 q o
1 N! W3 d9 d4 C3 G3 s
容错能力强2 O! r' t5 A" Y' v
2 z/ _/ d9 R8 m5 n( J3 S+ W
译码可靠性高
, v; ], {3 z! W
( K. D0 g/ [0 u* C; J可引入加密措施
8 D% d7 @5 r1 S, v1 D& k6 p+ r3 w# f% O- H8 t% t. H# z! y
成本低,易制作
8 f% B1 @9 p$ z9 E- o
7 K7 o2 z u$ d. H) @8 s8 H- A$ ~缺点
/ n' F8 j5 \- p" Q5 h8 G二维码技术成为手机病毒、钓鱼网站传播的新渠道
2 q$ w* a8 K$ N _+ @" h/ b7 l7 i& y
信息泄密6 f, u) a+ ?) J* Z+ W
+ a3 T) c& F2 \8 |! J
目前流行的三大国际标准$ |4 a6 v3 j, Q6 m- f- |1 z
PDF417:不支持中文
L2 |6 H$ @ F& `3 Q- {
1 v' M# w3 j& v! G3 PDM:专利未公开,需支付专利费用7 q9 Y; |" h! u' T2 s
4 l( K3 h, G% E- ZQR CODE:专利公开,支持中文
' X2 z' K) e5 W; w% c+ v* l6 P; t9 G0 ? H/ H/ o- {! w/ q
QR CODE 纠错能力
0 z! P- T j3 ~: FL级:约可纠错7%的数据码字$ b/ n; u; a$ C$ y, V, d @
6 e6 t- ?+ M. }% Q/ k& q. z& h; _M级:约可纠错15%的数据码字* c5 M5 Q% J& P' m* p5 }
+ S/ O" |1 A- b0 _4 M! b' N2 v
Q级:约可纠错25%的数据码字% ^- K8 I7 F8 t4 E9 K1 Y
* r! I3 x! ^% K# Z" QH级:约可纠错30%的数据码字! J) x7 V! [; `' s7 {- d* K4 s7 C. ^
7 Y" g9 M% K* f( P; i7 J前提条件8 b1 X$ ^8 C9 g4 C
GD库
5 @% ?: Y; l: @; j% ]
; ~& }7 W9 y' i* l9 K8 k一、PHP生成QR CODE
4 `/ p7 r: y$ O( }/ h官网:http://phpqrcode.sourceforge.net/4 H; g8 S) O$ p: F, o5 ~% `
, E) [/ R3 X5 i" J4 j
下载源码:https://github.com/endroid/qr-code
; _ Q* U0 L. W6 `8 g
# F2 d7 ^* D7 J& `9 h0 a目录结构 w! T' g; ~0 U* p
9 ~/ ~5 P, g1 Z8 G7 i/ g0 O9 I) _
' H& _8 s n9 r1、qrcode_create.php
# H; b) {4 t C$ Jps:生成普通二维码! N }( Q4 \8 E& b- W& k) G5 X, I
- 0 s7 t5 g4 q2 D' x; y
- include_once "./qrcode/phpqrcode.php";/**& y" q, x4 M& P" c$ }5 u1 P l
3 q7 P8 C0 E% H2 T( m4 q- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
* e) G# f) M3 d4 w0 f - : z, H* o( p. O3 f* y. y6 w
- * 在浏览器上直接生成一个二维码(内容为abc)
1 {0 n. I# ^" D& v - 4 d' g0 J% J( A5 E/ }! _5 d
- */QRcode::png("abc");* d2 L' X" U/ p- B8 f
, ]9 {& S0 Y' m! i5 Q8 {- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
( D7 _2 f% ]0 [3 l
; G" P W, k# e: d" S& N! V* `- * 生成文件到本地
1 F8 m9 C5 s$ A4 @, } - 0 S3 A3 i5 x5 e. Y) h. o
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
: ^5 e' y9 q; H* \' X; [
- H: f. \- u& |2 Z- * PS:$saveandprint源码的p6参数做了修改( Q- ]" l9 Y& o: v3 u
, a# z2 N& O5 F/ B% x* W- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);- D: N+ S" Q5 U0 @
/ R/ n% d. |0 p: A7 b+ [) W& O7 k- % A5 f- D4 B; B1 c
复制代码
' _0 y' ~5 \% [& {/ `" t2、qrcode_logo.php
9 K7 P8 a3 a3 Y. i2 Z4 ^9 y) dps:生成带Logo的二维码
+ I- X, J$ B' ^% K8 _- /**
8 k: c/ Z) @: t - 4 {. r, \0 P+ n" J% ?, ?3 x) |
- * Created by PhpStorm.8 {, U3 a* R7 F' Z5 y2 Z6 e) }
8 `2 Z1 F% Q) A$ G+ L- * User: user* w) K# B; G$ M: [6 D/ {1 w
; l* A. | a0 ~1 G+ d7 B4 i. K- * Date: 2018/8/16
' X! r4 Q+ o y+ j: q9 X8 Y - . C7 K0 n% l$ }: V6 M
- * Time: 10:43
$ P; H+ I" k, y: Y0 t4 Q - " d3 l3 E o3 q9 {( o6 L7 G9 e9 J1 ]' ?
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
; Y2 G: b7 z- ^- _% V+ t: L" b3 U - " Y+ p& a7 F7 z' W
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称& |, r+ A7 D8 b6 P w3 R
! b8 t/ w L# Q5 H1 v1 h/ X/ t7 t9 A6 I- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
( L8 @) d! |' F: q: ]
2 W, p9 Y2 O# i- q- $margin = 2;//边距
7 k! J+ `% E" J4 F- m
% Q& j7 n, l. o- U. y) F N( ]- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
7 G* S P- r3 h. L
4 K! {8 P; S9 u% O) b7 Z& I- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
9 ?' i t# P1 c# [% H& }. e8 W& }5 e - & h. o$ C/ ^5 j8 D( V2 q3 \
- $QR = $picPathAndName; //已经生成的原始二维码图. V6 j, k& i# u; N' c: ]7 [
2 B+ L5 c$ K1 l) F9 o8 B- $Logo = './pic/logo.png'; 2 I* V! L. K; l
- $ b- l5 c$ j4 H. h! i
- $Logo_re = './pic/test_logo.png';
' L4 t' r# W8 C( r - a( n) ^. Z4 ^; A( }! q$ A
- $QR = imagecreatefromstring(file_get_contents($QR));
* ^' } p$ H H- d8 y: I v - 3 _& B2 @1 X+ c* _* \1 {: E" C5 d6 n
- $Logo = imagecreatefromstring(file_get_contents($Logo)); ! @; g* U8 _/ w
- % o) g6 w1 Z; }3 P1 J" j" @
- $QR_width = imagesx($QR); //二维码图片宽度
( [# S/ h' u" }. C; ~/ F7 Y: Y/ t - " |9 i! m6 S a$ t( a: v
- $QR_height = imagesy($QR); //二维码图片高度& i0 H0 d" s5 w; S
- 9 c9 M p% r& C) g
- $logo_width = imagesx($Logo); //logo图片宽度! c$ X% M* C- b6 ]
. y! Q9 m9 o1 J5 l- $logo_height = imagesy($Logo); //logo图片高度% @7 t2 [7 m* i5 v
* y3 }- j$ C2 G$ j( G- $logo_qr_width = $QR_width / 5;
2 H2 P; B+ d* l K6 u8 e0 ~
- l; S5 H2 ] ^0 F- $scale = $logo_width / $logo_qr_width; - e0 a, n9 ?+ [5 k1 G
% y1 n+ Y6 x N1 @; i! N- $logo_qr_height = $logo_height / $scale; % X6 U) u0 M5 U& ]2 f
0 q1 ^4 R; ` I7 D1 b; }- $from_width = ($QR_width - $logo_qr_width) / 2;
8 ~8 _* T) X* x4 i! { - 1 [7 \" E0 i+ ^! x
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); 4 _" j' r# D4 f" \! n
- 7 a/ T% @4 m, B4 S5 P
- //输出图片$ K) c* o! D9 Y5 U; J
* m. A/ @2 d$ t0 p& P% Q. d* `- imagepng($QR, $Logo_re);
- \# l2 ]; ?8 ]5 ?# |" r
6 A7 G) x" x b- }
- z- t: f) V0 v& @1 s( f+ H; r* X
9 B1 N, ^& y4 X6 R6 l$ e% {% S7 V
; H* _/ }( Z. g& C ?( _
复制代码 3、qrcode_vcard.php (生成电子签名); T# o+ [7 q4 P& ?# e
: W8 x2 c6 `, `1 _
vCard格式:https://zh.wikipedia.org/wiki/VCard
: _0 d- ~. E( o8 L( B. `
$ |) e+ s5 V0 x+ f) {% l. h5 o- # s9 A3 I! V# h0 L; @, Q8 P
- * Created by PhpStorm.
+ k2 w* W6 X5 y, `1 P/ F! v2 @0 c - + z9 W( w# q* L, H
- * User: user1 D+ {$ T: K( N9 G" _5 i5 G
# a! r4 {. o& m- p5 U! I- * Date: 2018/8/15
8 \5 }% Y) \* W2 z. P2 Q, x - # {1 z! ^1 Q g! w. | u
- * Time: 23:00
6 G. i: C7 n [# c0 U - 6 V2 A; T& F7 |& v
- */require_once "./qrcode/phpqrcode.php";/**3 f% n9 G4 z0 _# ?+ j
- 5 m+ k7 X9 Y: U0 C3 S3 u( E
- * 生成电子签名/ O6 ]' k. q1 s; m4 P6 i4 x' \
$ |* z e5 E$ X9 f! g: G- * PS;使用微信扫描二维码
2 `( v: u5 \, {+ b' R) v& G - + X/ a! z( P5 y2 i
- */$content = 'BEGIN:VCARD' . "\n";//起始标志* L8 d# B# q! `' [
- 3 @3 @+ v A$ O2 v, g
- $content .= 'VERSION:2.1' . "\n";//当前版本 H9 ]; a: X8 m' L
- 2 t1 \" W3 `, K' L' I: P9 B' a
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
! a \" j) c+ X r9 d% c
. Y z; g8 k8 B5 P) Q8 H' y9 o# ]9 ]0 |- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
, F, p' N6 v/ S: }, _8 m
Y. N& H9 }# ?% c$ X& Z0 b- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
; X! C5 _# f0 a - : e$ N% N. W# l
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
; g# f* w# x, D2 o - 0 C3 u M# \8 i( u
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址. E; V2 P4 Y9 \. m4 u
, _3 G. z$ _& @" F7 B8 H- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
) V% w5 S% M" W: B - ) M* d2 `) B6 P& D
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
9 c; v' W$ p; ~) D
9 a. c7 |6 [& E( B, A6 @; J" y- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
- w5 |! D3 B3 h0 s - 1 _ x% `, F- K j
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
/ Z0 K3 [6 R$ V: g( K. D
2 b3 E8 r% c! q& V( r0 }3 x6 s9 |- $content .= 'END:VCARD' . "\n";//结束标志3 |: g( ~. ~" D& G
+ L( V" v e% s8 T, a' F5 S- QRcode::png($content);, S1 J* [0 J5 X+ V
) o) Z* A B$ b* i2 i- ) A, e# z1 F) F$ c
复制代码 $ r/ L: N2 V+ s+ m* e
相关文章推荐:
! A+ Z2 k! A, U Y% U1.PHP生成微信二维码实例
8 O$ W( o: K1 C: ]! Y) h4 Z7 I2.php网址转换生成二维码
$ k) t1 v! h8 P" @* S相关视频推荐:
u4 {! x8 z( {/ J4 U' v1.独孤九贱(4)_PHP视频教程+ S. l1 l5 D- x" I ~( B2 y
二、JQUERY生成QR CODE
4 c" ~ C/ ] B4 \% i2 n) R% j* s源码地址:https://github.com/jeromeetienne/jquery-qrcode
, b# B# m9 J+ }1 }! I% A% `% Z4 p% X/ G
jquery_create.php
1 i# J/ t8 }2 C% X* T
+ E/ s6 a0 d" `) b) F2 a4 b* y4 H" `0 b" S- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
& }# p ~1 s! C" y D9 s8 ]$ ?) D9 @三、PHP识别二维码: j) A+ t. p8 b+ d2 i$ L6 _1 b. K! K
1、方法一
8 L, r& d3 j, [& z# i) V$ [环境需求,安装如下扩展- t( T4 y+ q- [/ l7 s
- ImageMagick$ s/ ~7 u1 P! s9 ]# S9 F, t; n
- zbar
7 m4 ^; }5 R- i& }: N D$ y- php-zbarcode
/ q4 g! J3 a) F1 _4 y% S g
8 u# r) q; [9 Z- c( G9 D/ {2、方法二
$ e- ^* C& \ l8 pPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以5 A- P; q4 W4 |7 T9 k9 K2 m$ D
qrReader类:https://github.com/baagee/php_QrReader
. V/ S$ r' B# S4 f j+ C8 N5 b
0 d3 k: k- k' o
2 V& m a/ L0 B& s0 Q, f" _- $qrcode = new QrReader('./test_logo.png'); //图片路径
: e' s2 P* t8 X6 f; A - 9 n0 E, V. {$ |# }- [
- $text = $qrcode->text(); //返回识别后的文本8 p( P& E$ ^8 D, p! {
* U% Q9 n, U1 q, T8 T- echo $text;
: u* ^+ Z8 C2 C' k: x1 ?. q0 R
3 j$ [$ }& p5 w, ~3 L
4 J" K. x) E! I/ c1 w
复制代码
7 w# i# C2 f/ s3 K链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
* h% j& B$ ~8 `1 N3 J; r- w+ {$ n# `
/ n0 E# [% y! r1 T r5 I' V" g7 N0 \" ]( d3 Z6 d# }" B1 Q
* u4 q* M, i' a" r
1 s& f1 M3 w3 J* i, W7 x: K) Q3 D( @
5 @5 s: b- T- X$ w) g
' t! Y7 l# H& K
7 k+ y5 j# u7 [
|
|