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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17805|回复: 0

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

[复制链接]
发表于 2020-7-24 00:09:21 | 显示全部楼层 |阅读模式
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
6 j: o; Z4 Y* O* r---------------------------------------------------------------------------------------------------- ?" j9 |. M: z( _0 A: ]$ i, o" L3 v# U
二维码的分类" M+ x0 \( L7 u4 S$ a8 s
线性堆叠式二维码4 x! a, y$ p1 |) a) }
0 d( Y8 u9 W. q. r& {# O
矩阵式二维码- w: a% c  y( U6 n$ V4 Q

7 p! d, I# \' m二维码的优缺点
% H5 ~% q" ~1 r# {( X% L' ?; H优点
/ f. L+ \* d+ K9 ?8 W2 [/ G" Y% W0 w信息容量大) Z1 h! M- E2 ^5 l; x

; P7 f% w7 h0 v# c% {' X编码范围广
: Z' D6 T5 u6 u% a5 Z: w& F
- {+ ?$ K; A+ V- [容错能力强, k  i% P, }/ z- u% c" S2 m1 a

2 D8 _8 _; j' {6 r6 `  z& U译码可靠性高
9 t& R, S/ l9 t& D8 q' ~, X9 X7 y# F
6 k3 j7 e' ~/ i" ^可引入加密措施
+ k) |8 X& z* s! S
2 Q( [* I4 D! o4 `成本低,易制作" a  s7 q8 i7 @( p0 I

0 b) N; @  @# Z+ t; }$ ]缺点
+ R9 o; |5 [* n0 w( w$ Z二维码技术成为手机病毒、钓鱼网站传播的新渠道
) n( j% ?$ O# j5 w( Z# z: K( f2 Y/ i( ^9 H
信息泄密. {7 q: g" S8 z. E0 ^

8 Q6 j1 G, F0 f7 Z, q目前流行的三大国际标准( H# i7 R2 X- y1 K( Z3 ^
PDF417:不支持中文
6 V6 S( s3 h% Q" I1 i& c0 ~( e5 A# q; M. T" P$ O
DM:专利未公开,需支付专利费用
5 W; d- w. A* V4 V4 b8 {2 V- X- V4 {4 n1 z* }* n
QR CODE:专利公开,支持中文
% x  {, z/ O/ C) ~, C( g/ y; M! F+ a3 w5 r
QR CODE 纠错能力
, e8 W5 d9 l5 \L级:约可纠错7%的数据码字- l: f1 ^( @$ E+ x

3 i4 ]# T  k3 w8 q; n. XM级:约可纠错15%的数据码字$ [+ G& `7 f$ b2 h: h) e; k

8 m3 _6 D+ N8 n8 o/ p# g- KQ级:约可纠错25%的数据码字, P# r2 u6 T0 i5 @" m6 K

" H! y* P, y/ m7 DH级:约可纠错30%的数据码字* r  [# O6 W* B+ ]

9 L4 U* h. @2 q* x前提条件/ ^% s3 D7 q% q. c
GD库  p& O1 e) ]* S9 D

( ~. ^; d/ {! Z& w: k* X! ?' H一、PHP生成QR CODE
9 I9 t) V) I7 v9 w" i8 C官网:http://phpqrcode.sourceforge.net/
$ y3 i$ B( }. c
/ A0 \; M' Y5 @$ t  X9 j下载源码:https://github.com/endroid/qr-code
& B  Q$ G6 e3 l/ U# m7 Z5 a1 m0 ~( w+ d* w/ ^# ?' s( m+ x
目录结构
$ y2 u' ^0 Z: b+ E+ m7 e9 R! Q 03130c7c8ed2925e6f0fa9bf23525edb_1573193604581540.png
" ]9 G( J; ^3 b) e; L
$ J- K/ C) }8 y7 K2 |1、qrcode_create.php
# q% k9 [) Y3 C9 U3 ips:生成普通二维码& Y, K1 N/ m8 f& T
  1. ) q! H; V: x% i: e+ g
  2. include_once "./qrcode/phpqrcode.php";/**
    ; f" r2 |' P0 |
  3. # r( J" V& k8 s! B
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
    ' ^: ]. @  ^1 r1 t# T
  5. + [# Z! R0 O% ], ]6 {8 O7 ?/ t
  6. * 在浏览器上直接生成一个二维码(内容为abc)* b& _0 J7 j/ h& [1 n9 f1 T+ w
  7. 4 V  a1 k: ~9 X2 N, q# y. U. Y) K
  8. */QRcode::png("abc");3 ?  l  H( m( Z" D3 I  [: h3 D
  9. - R8 K, p+ @) y, j9 l9 y* a
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
    - W3 p" _& m2 D8 |

  11. 9 a' P: \' T- G: ]9 y+ `
  12. * 生成文件到本地6 E) A& l2 a7 |; B

  13. & e6 a& s% V; A: ]) G/ c. |' u- B9 Z
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)6 ~, n  D. \9 b3 V4 n# \4 @# A' U
  15. ) H2 X; s9 b: P" U, @: S; O. S7 t; T
  16. * PS:$saveandprint源码的p6参数做了修改- Y- B- K# P. c) N
  17. ! r1 i" B/ l; ~
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);2 Y, m& T4 o# h

  19. . l! @' x# {% X" j" ~

  20. 0 k" U3 E( r: a, d+ w3 E
复制代码

( v7 L5 f! M6 w$ h: Y8 b# F2、qrcode_logo.php
) U. ]6 ~- s/ H. z) I0 Yps:生成带Logo的二维码

  1.   z4 p  O# s* Q4 }+ N1 V
  2. /**0 ?' r7 _- Y( z4 Z$ Q
  3. 1 r& p# r7 i+ s; M/ e
  4. * Created by PhpStorm." Y+ w; K$ @+ a! ]! Q2 {3 ?
  5. 7 f9 \: g7 P/ `' Z3 c
  6. * User: user0 ~- h: S* R  j" A2 {

  7. * [5 m. T( A, D, u; a
  8. * Date: 2018/8/16
    7 p& c7 c) [0 w/ k7 B  U( q
  9. ' R+ [0 C$ H6 i, q  u1 y8 T
  10. * Time: 10:43+ R+ F! ~0 }' T( v3 |: I
  11. 0 N! z% j% ]5 Q  f9 M4 g/ Q
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";% X$ q- G; O8 n; r  p6 a
  13. ) Z4 S5 @  K; Y
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称' s- m9 I+ u% Q3 f2 M

  15. 1 w2 o# P- `/ U" _. Y1 C
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
      J  u8 G1 Y. i3 |
  17. $ M. {0 Q+ k) u$ U9 d) L, r6 }/ U
  18. $margin = 2;//边距/ w  H$ m% D. }4 O; Q  v
  19. " c- V0 \+ O$ X3 f* a2 W1 ]3 N
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片: u' d* T7 f8 F0 W, n3 c8 Z

  21. # H1 R: C) g$ u/ ]! h4 o4 S
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   
    : |" E4 y3 g' H
  23. 7 b& j: T' j) N7 }& F7 |. @2 o/ _
  24. $QR = $picPathAndName; //已经生成的原始二维码图
      C! H' }4 w2 c6 W: q/ i
  25. * ?# X, \) ?  [3 s
  26.     $Logo = './pic/logo.png';   - Q8 ?$ U7 s. v6 b1 ^& O
  27. ' X& g3 t& e$ t: l
  28.     $Logo_re = './pic/test_logo.png';   
    ( R9 i" t  U# Y( l* ?" ^" h

  29. * K- @; c$ P3 w; a# _0 k
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   2 k7 M4 T) i& k* w% M

  31. ( i4 i' I& A% u% ?! v
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   
    # ]- m3 s/ O0 h2 R1 e' z

  33.   W( f4 x7 H* L( T( R8 d
  34.     $QR_width = imagesx($QR); //二维码图片宽度
    0 R4 H5 E" E- u- Y% Q
  35. $ ^% d* x0 i$ C% W: m
  36.     $QR_height = imagesy($QR); //二维码图片高度1 ~. k" q) ^  o1 v- c- ^+ g( ]) R4 }
  37. 6 F: f' {+ @+ C
  38.     $logo_width = imagesx($Logo); //logo图片宽度+ r. E# F6 |$ g% {' l  Z# U' r

  39. 3 m8 i# X2 n% w+ _7 Y1 o  {
  40.     $logo_height = imagesy($Logo); //logo图片高度
    ; c  A* \/ E2 |. p, l
  41. 0 K7 e* y. v& e( y/ o1 i) h
  42.     $logo_qr_width = $QR_width / 5;   
    9 C; G- H5 o5 [( q& S' M4 y6 G
  43. 5 E" \+ H6 S3 C! U$ T" H
  44.     $scale = $logo_width / $logo_qr_width;   , W; o% ^1 J" m% I
  45. 4 e# a. ^  g& S! E$ C& G' Q4 d* D
  46.     $logo_qr_height = $logo_height / $scale;   
    9 Q* ]5 W6 @# s0 |3 x# `  i# L0 b

  47. ) M, T# M- D6 o. \
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;7 ~7 U$ R8 H! m+ H7 ^
  49. ; X$ N) n. S4 N
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   ! ~* a& `/ `4 i3 Y( u( c

  51. / l- E# V( c5 U6 ~7 u# b
  52.     //输出图片
    8 x  |& j6 t  i
  53. 5 I2 n  c6 g; d
  54.     imagepng($QR, $Logo_re);- N; j$ s6 [$ ]" h' d  a6 ^

  55. ! V5 Y" m/ F. @) Y4 Z
  56. }9 Q/ e* |" h8 S: Q! Q2 l8 V+ I

  57. . b$ n2 Z  F1 M. c% t/ j) \7 j, N

  58. % c1 r0 J. o! ?- Y  J
复制代码
3、qrcode_vcard.php (生成电子签名)
. M* g4 x; N5 \) d$ e5 [/ d5 A0 O9 {. L9 S
vCard格式:https://zh.wikipedia.org/wiki/VCard
) }# |' N4 S  w' b" `
7 J* |. [5 R: ^3 k

  1. ! q& P. H" y* I7 S% N; {
  2. * Created by PhpStorm.
    * j0 G- L6 o3 B9 E+ g# N

  3. ( ?8 N9 ]! f. e) t
  4. * User: user
      j- x& y5 Q; W+ U3 \1 |

  5. 6 v6 b7 x# w2 R1 @. K! x
  6. * Date: 2018/8/15" o8 n# p9 c! W

  7. 6 |6 B! x, b& E# `! f$ ~0 V
  8. * Time: 23:00+ n) A3 M/ O! H3 |: U- z# q& C
  9. 3 w, k9 ], M  G$ E) V2 q
  10. */require_once "./qrcode/phpqrcode.php";/**
    ) F" g7 n2 s3 v; Z

  11. 9 b! K  E3 l# J' `9 M% H1 a5 A+ a
  12. * 生成电子签名8 _  a. I! N0 z
  13. - K& o- a7 m+ ^! X
  14. * PS;使用微信扫描二维码$ S$ u# m8 ~" i

  15. ( \3 g5 R  i3 S1 S8 f8 V: i
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志
      v. ~- \  N2 A. q' ]- _. U
  17. 6 ~, ?- q# y4 D. q+ T% o8 D; l
  18. $content .= 'VERSION:2.1' . "\n";//当前版本& `0 _3 J1 ^; ]- B) a$ ^% f
  19. $ o! D+ I. [  e- \+ ~
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
    ) _) _0 y9 N: s8 ^1 `0 p/ b! G

  21. 2 y% F: H) f. J# C
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称  ]' a5 H7 A3 w1 z6 }7 I( u8 e

  23. # {7 W4 M3 u, e' h0 b& m) f& Y9 R
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位
    2 s5 c' ^! r8 F: v2 A2 H% d

  25. 7 I7 r/ t, W+ e
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话: g0 K) c0 z, Y/ K9 |2 K3 ~
  27. 9 c/ I2 P  v. [$ b+ ^
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
    " J( \3 d' b: r5 T
  29. & y7 h) n$ i4 h. N
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
    . X4 r- L# \  e% S. g% E

  31. 9 o6 O3 D& n1 n) G
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话* |9 _2 _! d1 a% ]% y! U% N) Z" ~

  33. 2 e' f7 F  a, Y
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
    6 [. h6 z9 v4 ^+ C1 h: Y. c6 }

  35. / o) M0 W; J9 t
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页
    0 K/ c5 G4 Y. i* F4 i% V
  37. 1 T/ z5 {# t! ]
  38. $content .= 'END:VCARD' . "\n";//结束标志
    / r7 s1 x% z8 S/ G
  39. # }! L' O# U, o* k% C! i' _
  40. QRcode::png($content);
    $ i+ c4 H; b1 _/ b- i7 E7 ~& K

  41. 2 o' B2 V1 F0 a( s. |
  42. , G: P: b+ L' t- ]' m- ]
复制代码

% {9 B  y% K1 `9 I7 \相关文章推荐:1 Y/ J) [. P. J, y& I
1.PHP生成微信二维码实例' Y* `) t% Z0 r1 o  h# ^' ~9 B
2.php网址转换生成二维码5 n! P' L1 a8 n! w
相关视频推荐:) J, v# b$ N  }& C+ v6 z: i
1.独孤九贱(4)_PHP视频教程+ o# j. I' j6 R: D# r2 e- \
二、JQUERY生成QR CODE  f! W9 @4 k" q
源码地址:https://github.com/jeromeetienne/jquery-qrcode# I1 A' C$ Z) p5 v, j

  C( X  H7 n6 ujquery_create.php
7 m! [' N" e; Q- M+ t
" V7 c! c6 H" }) z% Z2 ]
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
  ]1 f- j5 ^; t/ ?$ {$ _
三、PHP识别二维码+ L1 Q! V- M9 F' _
1、方法一. f" V7 G- P# j* R" W
环境需求,安装如下扩展4 l3 c2 E8 j) ]$ T
- ImageMagick4 d9 R# v  N: }! @$ |; p
- zbar7 O, F* o0 L( x$ ]+ h! {/ X5 V
- php-zbarcode
* \/ _: N1 |+ |/ H4 ~- F; R0 v6 N* e4 ^9 D: G- h
2、方法二
! R: E+ D% F0 ]: }. G& p/ G5 ]PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
4 `' y" }6 Q4 k& eqrReader类:https://github.com/baagee/php_QrReader" Z# [0 x# E- ]" E" `

" V, \' H8 X  W1 T

  1.   u0 s/ |3 F) G, E9 [9 q, C/ t
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径! k+ L3 c% n$ e9 P

  3. ) g8 F# P8 v8 A0 h
  4. $text = $qrcode->text(); //返回识别后的文本
    ' I# ]: G/ o+ @8 L
  5. - B4 s0 d1 T3 R( t( L1 I
  6. echo $text;
    ) K0 Z( l8 Q4 @

  7. & f# O( Y1 s8 c( Y8 J0 b
  8.   E) a' v: X! E1 k6 S
复制代码

0 i$ r  Q0 B" p$ x& H- D4 M链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7( X9 ^& W; g+ F/ N$ X, z6 x
! a4 ]& u* N* H9 t8 y

% n' Q+ S6 a& F% d6 p6 R8 h6 h! p1 N; d7 g" n
* p  a$ ~! n3 U8 a" Y0 n' E

/ F& z9 h* P% @
; a# @. y7 e- W: `5 U: D" _* T% T7 E# i  X5 ?/ z: V  M0 d1 E

1 N* {0 V, c/ r! `. V) l  V( J  f0 f
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-19 16:52 , Processed in 0.060302 second(s), 25 queries .

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