您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16717|回复: 0

[php学习资料] PHP如何实现二维码的生成以及识别(代码) ------------------...

[复制链接]
发表于 2020-7-24 00:09:21 | 显示全部楼层 |阅读模式
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。: K" f, J) W5 v/ s. d  D1 L" j: q
---------------------------------------------------------------------------------------------------' [' l* U( x5 ^) J
二维码的分类
4 I4 W- L7 f) g9 \. B, U, {线性堆叠式二维码9 B2 `" }7 L2 b# M4 t

# s2 V: }6 `1 Y% W$ f矩阵式二维码
1 d2 O, V# A4 z5 Q2 D: }2 \4 `) o
二维码的优缺点& e( \  M; Q# g
优点) R2 R9 Z+ K3 B, }- v/ p7 B( ?9 B; _' z
信息容量大' `0 n) |( @; F" ^# E
; V; p3 s: g0 n& X! o
编码范围广7 s  X6 s- k6 F0 J% @) V2 q& D

& x& l, T; m- I) c  g3 y2 j% V容错能力强' C) {/ a6 L+ v+ I! E, B

" H3 k& s( G' W, p0 Q译码可靠性高1 J% T3 w; e6 i4 F% X! q! |8 Z
1 Z! m7 b7 I9 c# }
可引入加密措施% e; n7 r* D8 e/ T. ?5 |

7 w* c8 o3 {; b' @1 e6 r成本低,易制作
9 o4 ]5 m! Y! q9 ]
8 T: B# ]2 k8 W: a缺点# x( ]3 V( l+ y* g4 N
二维码技术成为手机病毒、钓鱼网站传播的新渠道
& g+ b* i* ~1 d- M# k
1 ^& m& Y" ]0 b信息泄密
- u$ i# o- e! j; \; ?
) o; L9 N" }& h5 J8 A目前流行的三大国际标准
7 l( x3 Y" B0 d, P+ `PDF417:不支持中文
: `+ w- X; |4 b) @- m1 l7 n% O7 N# @$ C
DM:专利未公开,需支付专利费用
( F! t. @, r7 B1 C7 k0 ~' \  F, ^# ]; G' U) a4 D
QR CODE:专利公开,支持中文
: i! l& I" v( P3 ]4 @6 s: k+ a0 H
9 T( T; k1 E# tQR CODE 纠错能力- G+ [: ^% I* Z- }2 Q
L级:约可纠错7%的数据码字
  [. o5 q) L, o3 F8 f6 k- Y- c6 c6 m2 s+ q1 i) F7 t; D* I
M级:约可纠错15%的数据码字
8 M0 [3 w% ?- E5 k
( y; m8 h8 H, H1 g; V3 t/ b2 x3 l: rQ级:约可纠错25%的数据码字
! T0 ?! t2 \. M* E' @. \0 [) |& G% y/ A% g' Q
H级:约可纠错30%的数据码字; q0 m4 j. Q$ I% n5 |5 E

* e* Y' |- p: F4 P, x& f5 _, r前提条件
2 `* }) e0 J3 {+ z- v+ u6 D: zGD库
$ s' `' F' [, ~7 h6 N# g( t4 y8 D% Y0 W; {  C+ j
一、PHP生成QR CODE. l8 }9 u; @$ m& A5 M
官网:http://phpqrcode.sourceforge.net/  e/ r! V! k0 f' u- @& W, _
; Q0 F) x8 k4 Q
下载源码:https://github.com/endroid/qr-code; G" k. m9 k) H! v9 D, V
) ?" ]; P% K+ T7 i
目录结构
1 c- j" I2 D- R1 Y 03130c7c8ed2925e6f0fa9bf23525edb_1573193604581540.png
* Z) {0 I6 h# ]
1 Q" x8 |7 e' F6 r1、qrcode_create.php
# B/ V. U  U1 Jps:生成普通二维码
( V/ e; V$ E8 V; }1 V8 J9 ?

  1. 3 B) S: d9 I# y4 r& |' q
  2. include_once "./qrcode/phpqrcode.php";/**
    ) A1 u# B) d) x5 D9 G

  3. ! a3 G6 w# _7 B; c( @& x
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径5 a$ p& l' m) A- P0 f; L( @9 Y

  5. 4 ~4 {: K% i/ V' [1 v) s5 \
  6. * 在浏览器上直接生成一个二维码(内容为abc)
    ) B( Q' i, i/ m0 z/ p
  7. " c* e+ i5 g1 r  P$ F, K2 g# l# f8 N
  8. */QRcode::png("abc");& v' c. y. Z. r$ H6 ]: w2 y
  9.   o! ]% B4 |9 M7 s, R" t) O
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**+ U2 I( @" \! Q" E; w1 e5 ^

  11. % L, B1 T0 {& c
  12. * 生成文件到本地
    2 y: Q. b% O. ]$ K+ q8 L
  13. # S; r, K# v7 ~- h2 ?
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)9 }, Z( @& E9 x: y; g
  15. 2 x2 m# O. G9 T
  16. * PS:$saveandprint源码的p6参数做了修改
    ! ?* s+ |  X* F/ [  A, X  _7 k
  17. , t; @  V" [# Y  \
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
      k# G3 g0 h6 ^* V' T

  19. 2 i7 Z& |! G( z2 k! Q+ s' R& @7 Q

  20. 9 A+ ^1 W, A& k1 h6 H: p- {% z
复制代码

* k$ O/ O1 z2 s  @5 S  f2、qrcode_logo.php
& L& K5 V- i6 c  _1 V' fps:生成带Logo的二维码

  1. 8 u( g8 N% q0 C0 [: \
  2. /**
    7 T. k/ x5 h0 t6 j

  3. 2 T: Y; t  c7 X0 D
  4. * Created by PhpStorm.# [. g$ b. K& }0 c9 @" k, ?

  5. 1 ?6 `' l9 x2 Y
  6. * User: user& n8 X  `: D9 [+ @

  7. % `; a: f# \/ Z* H  t. [
  8. * Date: 2018/8/16- k$ b, n. o/ E5 Y$ O5 L
  9. 4 R$ k, @: H7 f3 x9 g/ [2 w9 r) k
  10. * Time: 10:439 c4 ]0 E8 X0 C: G  @9 C

  11. - ^0 o! C  Y. t# E0 n3 @# K9 |
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";- \6 b# S3 I1 g

  13. 4 Q: _4 w4 y4 `" c! w
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称7 B7 W7 P' Z; Q" l, j9 k# \

  15. 9 U# p4 O7 X3 O+ F+ G5 ^
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
    1 V3 c1 ?9 u  d4 O. I

  17. 4 L/ N2 u2 ?0 e: S
  18. $margin = 2;//边距  g7 {  w2 A2 V5 `
  19. $ E' M( `" |* A* E
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
    ' l8 n% Z2 w/ v& I9 r5 [

  21. 3 ]3 ]  I0 ^# G3 W4 m5 U1 ~8 n
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   
    + [/ `0 ^8 l0 T+ E) H' T9 F! M  S) i

  23. / g, y3 Q" h; C1 U: t( W( o" @/ G
  24. $QR = $picPathAndName; //已经生成的原始二维码图
    " c  s, R$ w9 a: |; c7 t0 s8 J

  25.   w7 n" t5 W( j: z" F
  26.     $Logo = './pic/logo.png';   , |  |: y; V3 B# M3 |
  27. 6 T2 ]- C) |: a! T" u9 g
  28.     $Logo_re = './pic/test_logo.png';   ' t6 L- w* k' T4 p3 q
  29. , r' n) B, B$ U" U
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   / M# |; ~* K9 n# j9 j9 O

  31. 4 V) ^% Y  e- N$ k; N
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   
    8 K4 O) N, p4 H/ Y' A. D+ n1 _5 L

  33. ' t6 A5 p" y& C. e
  34.     $QR_width = imagesx($QR); //二维码图片宽度
    3 ^7 X+ x3 F) T# h  x' ~9 B
  35. $ z: d1 j9 s+ J% p
  36.     $QR_height = imagesy($QR); //二维码图片高度
    " Z# n4 {' @* A/ Q3 [) \$ n9 A) M

  37. 7 ~/ N: D% {  x
  38.     $logo_width = imagesx($Logo); //logo图片宽度
    : A! m: a/ o+ B5 N

  39. . s8 E  d+ i8 e# }) I
  40.     $logo_height = imagesy($Logo); //logo图片高度$ C1 K9 j6 D" t- U
  41. 3 K" H' }, n) v5 b/ E
  42.     $logo_qr_width = $QR_width / 5;   
    # F1 K  J" l8 h$ g
  43. . C3 q) U( t3 b0 O! v: A( g) G$ T: |
  44.     $scale = $logo_width / $logo_qr_width;   * g* ^9 y( b/ v! F! x
  45. ( N' {- i5 d4 p" \8 e$ q2 G& ?
  46.     $logo_qr_height = $logo_height / $scale;     C; E4 L5 x; b  m* ]5 Q

  47. $ d, b7 }: x7 E* q* y
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;" D  k, o6 N8 n& m5 x2 }& V! G' f- D

  49. : I6 D3 C! ?  I
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   # y3 ^, D/ X1 M( d  n2 ?
  51. - Y6 F% g$ X1 y6 ~' ]0 o
  52.     //输出图片  ~) o6 R  y; j- `- _- k, z

  53. " P. }) R5 d0 A# K9 F9 F. ?
  54.     imagepng($QR, $Logo_re);9 s1 G& N3 v0 I" p' n  l
  55. # M% b6 n( ^% K/ w& s
  56. }
    $ s4 ]5 X$ t; j5 r8 [
  57. % D: t- D8 n+ B  M) ~

  58. $ r. ?' Z9 v, s1 N
复制代码
3、qrcode_vcard.php (生成电子签名)* Q% ^7 M$ ?' g' m0 U# t& x
% R6 o3 i* g* U
vCard格式:https://zh.wikipedia.org/wiki/VCard
4 Y- G9 [' n6 F& q4 b7 C3 l
8 W8 d  `7 ?+ x2 [: V2 ]2 U
  1. 1 z0 Z! z# h3 \7 k3 I, F7 t
  2. * Created by PhpStorm.
    / w: \$ Y! J; b2 ?( s

  3. - d4 w! i/ A8 M+ N0 I
  4. * User: user" k& W" h* L/ _
  5. - T( S2 Q$ y! a- v3 x1 U% |
  6. * Date: 2018/8/15
    $ g/ ]0 o% M% f7 j  T/ D4 a

  7. 3 D4 t) _( |8 d' g5 u, ?
  8. * Time: 23:006 K% b# ?+ e" D6 v

  9. & T& N, b+ ]$ A( F* W- v8 e
  10. */require_once "./qrcode/phpqrcode.php";/**, Y! T/ N4 u1 Y/ S5 T

  11. * n  S1 F  Z# P# N2 I- F8 I
  12. * 生成电子签名* R. V5 E+ v  J  z8 v/ D' X8 G
  13. , u7 L4 }  D' S  M
  14. * PS;使用微信扫描二维码
    3 ]/ ^3 o9 g! S9 ~" ^+ c4 D
  15. " p/ |* m( H  m
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志
    " l& e6 R8 F( K# b) y8 A; [- a3 ~

  17. 5 v, B$ W0 X0 p( W: {
  18. $content .= 'VERSION:2.1' . "\n";//当前版本1 v4 X* \4 T  G) b& Y

  19. . v3 i( h+ v  k% M: W$ ^
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
    , Z5 u  `" M: o9 m. H) |4 V
  21. 9 J: w. G0 p7 K+ D& I
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称/ e/ l" @1 Q# D- L+ w' X8 t: g

  23. ( b  N3 T) |/ P$ @# T0 y! v% |
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位
    - R* K$ \- ~# ]2 s3 T3 F5 f! F
  25. 1 y2 ?$ }, A& q- w! s
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
    6 n3 I$ Y- o  l# C
  27. % V) q! N3 O" E9 U5 T1 I- m1 U" d
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
    1 c: n' `& d2 c1 b# r, l3 P
  29. ' D: A# I9 C' }' s( P
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)+ X9 s5 n) b5 B" U/ X6 k

  31. - X1 ~0 s5 t' T( l: b" ?
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话) |/ c2 ~; i9 ]9 P$ j1 H" ?- M/ Y
  33. # M. I5 G, R1 n1 t: p
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱- v/ t3 G& K1 Z  V8 B. E

  35. + h' f1 k" l3 E/ u9 N. P* R! d
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页
    # L0 W5 g6 P/ F6 s$ _5 u

  37. ; h2 D: e3 v& m4 i5 j3 J
  38. $content .= 'END:VCARD' . "\n";//结束标志
    5 T6 ^+ p+ ~. p2 H

  39. * ?* Y0 B& S8 g; J
  40. QRcode::png($content);1 N9 e, B" m% g  t9 ^% _, v
  41. & q% [- h% ^0 C
  42. 7 k. n2 Z; k+ v& E9 f) f5 P
复制代码
4 ^5 X3 a0 g1 f6 J3 H
相关文章推荐:
. S3 f* `6 K) p& i1.PHP生成微信二维码实例: S* P. [) X# B5 j
2.php网址转换生成二维码" E8 i) y$ ]0 r' D6 p" Z
相关视频推荐:  {- n4 v& H7 C2 Y
1.独孤九贱(4)_PHP视频教程
, B1 B4 u8 N; V/ L% |二、JQUERY生成QR CODE
3 J5 ~- T5 |( P& O源码地址:https://github.com/jeromeetienne/jquery-qrcode
0 x7 n( m4 E; R2 D: k5 j* @. f" S( B' x3 _# q
jquery_create.php1 Y* j6 Y( u* j- p9 J
+ m, `3 R$ y+ A
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
& F$ L$ O$ \1 c0 i  ?
三、PHP识别二维码
7 |, B3 ]0 v; k- F+ k. X3 x1、方法一
* o" Z" q) q1 y环境需求,安装如下扩展
6 \% i( ?5 u# `2 ^- M! B- ImageMagick
( C  Y: }2 G; m9 d- zbar
" F4 ?1 }! ^$ V) e- php-zbarcode
  a! S! t4 i! S6 |; p
5 g' k5 {% K; E2、方法二2 [, X# @  k; S% `  F
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
3 D4 P. @. s7 N. l0 V( PqrReader类:https://github.com/baagee/php_QrReader) W6 }$ y" S+ u6 [6 l+ ]& v
7 A( Z& L" _, x* Y: _/ r2 n
  1. ) P/ E& i* b# m, p( ]
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径
    ) J9 U0 l" K  k$ M
  3. ! j' u  }* y5 a* ^# ?1 {/ X! L
  4. $text = $qrcode->text(); //返回识别后的文本
    8 W. z! e4 L/ h1 E4 o; u0 j

  5. # g8 g6 B& ~) }
  6. echo $text;0 u# d5 s4 d) t' ^5 K6 f! M
  7. , L, f! ]+ d& b! A& s2 F

  8. 1 E% K% R, C+ i- a
复制代码
# S# P/ X$ D0 m1 F% B
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y71 X$ J) K% J# R+ J8 t: `$ G* `* ]2 {
0 z5 W: H' R/ G1 z- c# o* A

) F/ X1 m4 @. o( I3 N/ z, |; r# M
: P8 V7 n, ]' G+ `# L% R: t0 l
7 @0 @7 Y6 E1 T( x9 Q4 ^) d0 B4 u9 x  C/ ?
( @5 G+ Y6 i$ \/ q7 @$ V
: f( n, E  j8 B" j+ A

! x1 M* `8 e0 g; {/ w. I$ R( a, H0 l1 L! q
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-16 01:17 , Processed in 0.096419 second(s), 23 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!