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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 880|回复: 0

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

[复制链接]
发表于 2020-7-24 00:09:21 | 显示全部楼层 |阅读模式
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。. R) g# A& k4 E  [1 }
---------------------------------------------------------------------------------------------------# q' T; C% M( G9 y& i0 D/ i) C  G
二维码的分类
# V/ \+ y& V* y6 U4 j) r线性堆叠式二维码: T- J6 [& n1 |! _8 V4 @4 K2 ?( H
8 ]# b( ^2 M1 h
矩阵式二维码+ N1 @2 C8 H* U; o' R; j% X% W

( I2 G- J3 e* s! ^# }1 X; J, y二维码的优缺点2 @% V) f% ?. l; H
优点* `8 G- h; i4 S7 O8 L) _6 |' b3 F
信息容量大
% _' D$ e1 w0 s' W; F
6 s6 M/ Y, @- _5 F编码范围广
- t4 q# f* N% w# W2 u* [" @2 z3 B' n% Q$ k& T: J# H0 {
容错能力强& _$ |5 H. B" P# I
) O: U' C8 o$ B( Q$ R6 M5 c6 {6 P# f
译码可靠性高
, g3 ~0 X: `1 n& O6 T
  g3 v, h9 _4 {5 m& h1 {! ]可引入加密措施5 M0 b, |6 k6 Z: }
- z! a1 ~' B  y
成本低,易制作
: g0 Q$ L$ [. W3 A' J7 d6 l
$ E9 U) Z, }3 ?缺点
* t4 M, h6 a' u8 G5 {, B二维码技术成为手机病毒、钓鱼网站传播的新渠道
( x' J; A, ^. ]
0 I9 Y* |$ `9 f- w: Y  E信息泄密& }8 @5 O. R4 g4 y# C: l3 o
  }+ c; n0 \9 h. j8 R/ T6 I; B
目前流行的三大国际标准  O; w. _: F. y% s5 h
PDF417:不支持中文* {2 ]) H% k( a5 F4 P

. o8 O5 e6 }5 m7 `6 qDM:专利未公开,需支付专利费用
8 I) ^" D& p0 B" F! r& G& Q
4 M, e5 ?" v8 p1 OQR CODE:专利公开,支持中文6 J! k9 n' z8 Z* H+ S
( }8 n& _5 \7 m1 \% a
QR CODE 纠错能力
5 @: i* F- a: R/ HL级:约可纠错7%的数据码字
' z2 l4 G! E3 F: x! F. [/ @3 N+ j) N" T$ S. M, e
M级:约可纠错15%的数据码字
1 t# Q# {$ R5 j6 m3 I" v& C: l. S) Y) g& Z: q. ?! H! @
Q级:约可纠错25%的数据码字: ^9 l0 L6 ]( L, }/ _3 Y
+ |) O7 l! w3 y, e; v
H级:约可纠错30%的数据码字0 H. O8 j5 x  e' \4 L% G+ V. n/ d0 M

. A, [. V# B1 V1 [前提条件
% P+ ^" J: y7 B- }  G- ?GD库. O2 X/ E) I4 S! X9 a
# t' W$ {* y6 l5 G7 D; m
一、PHP生成QR CODE* {  r9 s2 C( I# n  y. k7 @
官网:http://phpqrcode.sourceforge.net/
3 @. q( U5 p4 l) a' h6 R
1 ?0 P. t: l! {( e$ y: o4 B- H4 l下载源码:https://github.com/endroid/qr-code
1 M* P& {0 A' a- b  q. g6 f5 n* Q& p1 t  I% ]. ^
目录结构
9 D  _' R, F$ O' g6 J1 P$ \" I& l 03130c7c8ed2925e6f0fa9bf23525edb_1573193604581540.png
9 U& [! A  R' `! {: |
5 U: l- C2 i0 u& v& I& N0 ?) h1、qrcode_create.php
0 W) q( n& Y" r; Sps:生成普通二维码
3 R0 J! A- I0 Y/ {* L3 N0 J: O

  1. 6 D% `) q/ w  V8 r$ D$ P
  2. include_once "./qrcode/phpqrcode.php";/**4 ^# V8 c+ w$ C# ]2 u0 `
  3. * c$ L; b+ J% R, @! g4 _7 P' E
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
    1 U# O2 R( C* ~/ r( y3 K
  5. , U) v- ]. |0 N- ~9 N) v
  6. * 在浏览器上直接生成一个二维码(内容为abc)
    6 Q/ t3 e. D. b8 D7 }/ d5 \

  7. $ H# Y; @- ]' ^* a* b
  8. */QRcode::png("abc");! ^! _% H1 T- W! r6 Y

  9. 5 U. ^, C) w8 }6 P* W0 q
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
    $ i' ~; c$ S1 N6 U6 E

  11. 5 Y0 p' X" |9 g9 G8 |2 X1 J& Q
  12. * 生成文件到本地" o6 M3 j+ y$ _3 r; C8 D
  13. ) F; Z, d5 j' j% e8 u, y* c# S
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
    % t8 X$ [- I4 R  n% H
  15. 4 V. _6 @2 f, S4 v  t% _8 a3 _% \
  16. * PS:$saveandprint源码的p6参数做了修改( \+ M7 n/ t0 L! X% I+ o% ^% j

  17.   \0 ]* t' S* t4 C
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);. N. l2 w6 A1 r: T2 i- u4 E# v
  19. ( B1 O$ E9 P/ C2 P9 N/ T( r0 X! Y
  20. 3 ^2 l) k( \4 N" S6 @/ t
复制代码

9 x, I; r& u- {3 W1 n0 l) ?2、qrcode_logo.php% w! F# J* W% P% B3 l! w5 D
ps:生成带Logo的二维码

  1. + A- \1 ^1 D+ w* T$ L. L; Q
  2. /**8 [2 c4 C* \, H4 B9 N+ _: U- j9 ]

  3. 3 t; c1 {  A4 u$ R) x
  4. * Created by PhpStorm.
    + f( e" f  f3 O9 F8 y2 ^

  5. + M" v. C: g! I2 g
  6. * User: user; b) j* U! f  t9 U

  7. . M. S! Y. M7 t0 ~2 _
  8. * Date: 2018/8/160 X$ Z# Y  U2 X% ~0 Y- v4 {
  9. 1 D. X0 G# D3 }' @/ R6 k
  10. * Time: 10:43
    2 E- C& b# {! _, b3 z! [; @) I
  11. ( m7 b( m( \% O) N
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";
    4 t/ {) q5 p0 X8 k% S; S

  13. ' k7 v" ^  T5 P. ?! m# ?7 L
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
    1 [1 I4 v/ \, B2 F0 ?
  15. ( o! {. A% S: E/ ?/ N
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
    + E, ]. u# h  k7 Q# S9 v( Y  M
  17. 1 I$ @4 H7 N+ @( d
  18. $margin = 2;//边距0 V$ Y3 H* T" k8 i% w2 W% Y  }( }

  19. 5 X$ K3 c9 f  V2 ~( U
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片' {  W* U6 b, t0 q4 [% l4 Z$ k
  21. 3 L2 F8 j& ?6 G4 |2 M
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   
    ( r0 @% H3 s% v7 _( ~" c/ P

  23. - ^) {' [3 E9 t
  24. $QR = $picPathAndName; //已经生成的原始二维码图
    : q4 Z' I1 @' S6 C
  25. 9 T- ~" O% T  t; J
  26.     $Logo = './pic/logo.png';   
    ! @- b# b( x+ Z3 g. K

  27. ; i" y! k. i' y# c: {' K! L2 q
  28.     $Logo_re = './pic/test_logo.png';   
    3 O* s8 `1 U& g# V" d) j! b* c. Y
  29. 0 f6 h* L- m" N5 g: D
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   0 b7 X/ J3 d$ B( S  C8 v

  31. + S. o" x6 e* g, k2 Y) z
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   ' q1 D/ `$ c5 u2 e7 y' r; h
  33. ' c* z% r$ t2 w1 @
  34.     $QR_width = imagesx($QR); //二维码图片宽度
    2 T! r5 `# ]. W1 |7 Y/ {/ B4 m" |
  35. % M2 Y+ A* h; w3 A  ~
  36.     $QR_height = imagesy($QR); //二维码图片高度. P3 g  ^- M) n! c! B

  37.   A+ }: k3 T: @* p/ E1 }% m2 V
  38.     $logo_width = imagesx($Logo); //logo图片宽度, Y3 X# y+ {' h0 C8 c( V

  39. ! b% @' }! B; y( E+ f
  40.     $logo_height = imagesy($Logo); //logo图片高度
    * |1 [6 R( g7 e

  41. 9 n' F0 V" D" T0 F
  42.     $logo_qr_width = $QR_width / 5;   
    # D1 F1 W5 Y8 {/ L, N5 b0 _7 r6 O( S. p- O
  43. # a/ ^5 d. d, u, z. v% F/ h
  44.     $scale = $logo_width / $logo_qr_width;   
    : j' K8 ]/ {2 W6 H& j7 }

  45. $ g! ~& U/ G# I  Q
  46.     $logo_qr_height = $logo_height / $scale;   $ X) b1 j' Q. _  m3 f/ D# S
  47. # h6 s3 j( @; y/ j- |6 ?* c
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;
    5 M; ]5 V% H/ F9 m3 J
  49. & w- y$ M* f5 @7 O
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   
    . C4 _  X% O$ d3 E" H
  51. 9 @0 [! w9 l+ a$ n3 n
  52.     //输出图片
    % {( U5 g5 @: G, P; K, I4 G
  53. 0 H$ U9 r- p5 Y% Z& _  }' ]
  54.     imagepng($QR, $Logo_re);) @# N( m, }- C

  55. 5 d: y* u. q7 T3 O. ^' I  {
  56. }
      V9 E8 z% M( b7 `1 s' _; A7 U$ P

  57. ( O5 u0 {* g- g2 t: x+ x
  58. + t. ^! P9 f0 u; v
复制代码
3、qrcode_vcard.php (生成电子签名)
9 [6 A( Q: t, f/ H7 o4 t3 g1 f
6 y4 s1 r! B9 b! |7 h: WvCard格式:https://zh.wikipedia.org/wiki/VCard
7 x; Q7 U9 s9 P- Q. z6 A1 k5 w* }, C) R# ~
  1. 8 l# U2 [; H9 L* O
  2. * Created by PhpStorm.
    % h8 @: w/ k' k: G7 }* y

  3. . t, O: O# }) _: u% \/ D  G
  4. * User: user7 H' P; p3 A4 o+ R* q- r2 n

  5. 2 W+ B% `" o2 Z$ h
  6. * Date: 2018/8/15
    . t- O% F' v* j" m. V, _

  7. 8 _& Q  ^- ]' p  |& U2 X
  8. * Time: 23:008 N0 q  C* P" h& u0 H

  9. $ I. v- f- R, ^4 `0 |. l, z
  10. */require_once "./qrcode/phpqrcode.php";/**3 @( W- L2 }9 i! N

  11. * N3 \9 L6 ?# y( P5 D9 }6 G
  12. * 生成电子签名- S+ ]* \8 `: V* f2 C' U5 \" b. u
  13. ) Y7 A& Q% ]& b9 y
  14. * PS;使用微信扫描二维码
    4 \" U0 @" q  ~5 C& j

  15. % d9 ?) n7 e9 f
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志9 M* `+ r& F  v- [# S9 u2 Q, R

  17. " z& L( l0 t) [6 z) s0 @
  18. $content .= 'VERSION:2.1' . "\n";//当前版本
    " V7 f. s$ z' s6 Z; O1 w1 U7 [' [

  19. . \! Y! \5 k! p2 X3 Q5 L: ^( u! @
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
    + y0 P; a0 t- F3 e2 t
  21. ( z" i6 a" N' j9 l
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称- |  J8 u+ d9 d1 P( }
  23. ; b* [% m; D1 y
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位
    1 m' F8 M; q! h4 ~

  25. 9 |5 A* h6 ?" A( \$ ^
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话# N" I% p* M  m0 |, {) k8 D

  27. 4 @, u* q$ {5 |8 c( _4 \
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址% t. ?- \: g  W4 |+ C

  29. 0 y5 U0 k, ~/ h( M. i* v1 T$ E0 x
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)5 ~0 V1 e* f+ _( L

  31. 4 K; L. @" k2 Q( c* r- P0 J4 e
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
    , @! f3 ?  I: B+ I' B# Z: `. h

  33.   ^0 F$ N3 e8 Y
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱; X. k, F; \6 z% N! ~
  35. : R: g: ]- ~4 E# {2 q9 y! ^
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页$ l" W) a& ^# k- n6 _
  37. ( D5 p( G& u7 w8 l
  38. $content .= 'END:VCARD' . "\n";//结束标志
    8 g" u+ l$ b3 J, A3 G' ]0 X9 i

  39. 7 j, Y, {9 j6 }7 p
  40. QRcode::png($content);
    3 D6 K3 l5 A5 Z3 S) Q9 J
  41. 3 }" _+ f( k* r; T

  42. ! i) n# [$ `) S. L% b
复制代码
+ ?  X: g% B! t9 P6 y7 y5 G( E2 I$ {/ l
相关文章推荐:
3 M# H9 a7 g9 E. [1.PHP生成微信二维码实例
. F: \. w: k0 t6 C2.php网址转换生成二维码' P$ G' \0 d- h/ `2 J# C* P
相关视频推荐:
) u0 O- A( Z# A9 b3 J, O1.独孤九贱(4)_PHP视频教程
6 C4 B* y' w0 m. c/ F& [+ E4 B) A! e二、JQUERY生成QR CODE
$ r3 c& e' A# i& h源码地址:https://github.com/jeromeetienne/jquery-qrcode1 }: `( t2 _1 |# O
1 C- W$ u% |3 E4 E: N$ ]
jquery_create.php# n6 J/ ~4 U6 j6 t' o

7 K: F4 E" k' q2 l
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码

% J7 }) E. n/ j. G三、PHP识别二维码
' e$ `( k8 h& ?1 {1、方法一2 y% c! I( p1 u' i6 S- Q1 s. }- Q) I
环境需求,安装如下扩展
% n! R( d( C1 k8 p& V$ T- ImageMagick9 S* g5 Q  Z' K" a8 `! `1 @
- zbar/ ]' q* T2 D& x) _/ E' I
- php-zbarcode4 `3 o' I8 v( W4 m3 v/ Z6 T
- G" u' b/ h) X5 {
2、方法二$ s0 R5 X; v7 l1 X2 E  w) \" e' B
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
$ f3 v0 h" [% M0 |: |qrReader类:https://github.com/baagee/php_QrReader
; v  o5 S# O2 {& ?
% k+ o: n$ {9 a+ a" M( z
  1. # C  ^# l9 E4 c, Q" I; ~* Q
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径
    % N4 M) c( C4 R0 D

  3. % R# n. }6 \9 L+ Z$ y# G2 N* _
  4. $text = $qrcode->text(); //返回识别后的文本
    ; u& u7 x: `/ b( D2 w2 C
  5. ( s& B+ N# ^0 ?. R3 O" o
  6. echo $text;
    7 e1 f* ~0 N) e

  7. * ~8 q/ ?1 ?% a8 _% \

  8. 2 r  k; O' N# Y, A. E! e; X
复制代码
+ e+ P! t- X! n
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
5 e. _9 s8 N, W  B1 M: t
( @5 e  T6 m! z6 U5 B3 H+ L( J# \8 Q' [$ ?* H

7 G1 Q7 N9 U" B
( q2 I6 S  K0 Q; X
/ W% `  ]6 x$ k( h( p
+ D5 E% Y+ B: k+ d& w; O6 b
: a8 \$ f5 U* N) q
5 k$ D# R7 p1 d
7 {- V" ]! d* v6 |
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2021-5-6 13:45 , Processed in 0.224336 second(s), 25 queries .

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