cncml手绘网

标题: PHP如何实现二维码的生成以及识别(代码) ------------------... [打印本页]

作者: admin    时间: 2020-7-24 00:09
标题: PHP如何实现二维码的生成以及识别(代码) ------------------...
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。( v" a# K% u* u$ Z& H- M
---------------------------------------------------------------------------------------------------9 b: I" t8 p" p6 ^1 {; w
二维码的分类
& V8 W  b3 |/ M! X/ K7 t0 M线性堆叠式二维码
1 m% w0 D! P( @/ b7 F; F9 q
; x: N+ p) M/ y矩阵式二维码
! L7 m9 w8 Y' g3 |- @2 ~' \! O4 B9 @; ^8 P8 ]. I
二维码的优缺点7 _- L' I$ @6 U; K/ d
优点
8 T, f- O! F0 ~# ]信息容量大' j! @# b$ q" @+ \; ~+ W3 Q

% g. c  k* i& N( n% T2 S% w' J编码范围广; `  O# v0 x) n8 _8 u% ]* c
/ M" ^) a1 o! N$ w/ U' r
容错能力强8 i# p  z- ?7 E/ y9 Y: G. h

& J9 n- @4 i* Q3 G% h) V译码可靠性高
( [) X) C: ]' Q7 {+ x7 B% D* x5 j( T  i$ H) s- H5 p
可引入加密措施
4 ?% ?1 G6 G# y4 o
5 f  I( ^# d# e* J成本低,易制作
  n! s8 q0 a) j0 A2 m0 Y( R7 q
% q( c6 c! f/ g& F. |1 X0 F1 {2 Y7 Q; D缺点
6 K9 e. D/ p- c) R3 `  k二维码技术成为手机病毒、钓鱼网站传播的新渠道! \' h% q. G. G5 S1 L
' |8 E: U1 F+ }1 F# w" C
信息泄密' c/ Z/ J7 G1 J9 {! c: u

% o# H# L3 R# {9 s: D3 Y" y$ M目前流行的三大国际标准2 L/ {# ^7 ^: ^! y
PDF417:不支持中文; q/ Q! x7 [2 w, M( s2 A" Q
0 U) {0 `! x" r/ S* |, Z
DM:专利未公开,需支付专利费用/ }3 V3 }8 i+ O* F

5 p! g4 R; l, C0 u  b( sQR CODE:专利公开,支持中文
% Y1 @; ^6 t6 m7 v  V! o4 K8 b" e  a" V+ M( G1 c
QR CODE 纠错能力
7 D# Q) v7 p" s( B1 d$ X2 \- V2 hL级:约可纠错7%的数据码字, P4 }, a! x: X# ^' X" T8 x5 W+ G

+ {* l1 I3 I2 Y/ e, E, ?M级:约可纠错15%的数据码字$ X/ [) P* I  @6 W5 \
$ n" `& G- L$ x- H
Q级:约可纠错25%的数据码字
' w/ U2 _8 I! R$ q  f  r8 a; Y, |
$ c5 G  Q2 F. i( E5 B$ L" eH级:约可纠错30%的数据码字
! Z  `/ W) I/ {" i. s2 ]( n3 {
* O, o" g3 F1 J( f  B前提条件- I" n3 e- E" ~! e  P) V
GD库5 P; O2 E  e: {. Y( g% _2 `

* z5 b1 X; d! }, b# T一、PHP生成QR CODE
: \, W  O$ N9 [3 y官网:http://phpqrcode.sourceforge.net/
! p) z4 b+ Z& S5 G. J9 e2 n' j% h  L# z3 v. s4 X& _* d1 i. J
下载源码:https://github.com/endroid/qr-code8 [1 n2 N. N0 Y6 r4 p; S  d9 `

1 H/ m" v% a% N7 L: O目录结构$ Y1 Q0 u2 s# i' R+ \

7 ^2 M& h( R. w4 s9 G# }  s5 N! o$ l8 V0 ]  n8 O8 f
1、qrcode_create.php2 H, Y; j2 t4 q& b
ps:生成普通二维码- c( E5 b: r+ p
  1. ' \7 g& p5 V2 A! L$ T! Q5 i
  2. include_once "./qrcode/phpqrcode.php";/**
    ; ~5 {( @2 s1 c9 c2 O
  3. 1 z  O; ~5 \2 x3 X+ M9 n
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径& H0 p: e. [7 l$ H4 F
  5. # q0 C  |$ o! y( |: ?+ L+ ^
  6. * 在浏览器上直接生成一个二维码(内容为abc)5 T: ~3 g3 o! L1 B, u6 e
  7. ! b2 z8 H7 w% `, @
  8. */QRcode::png("abc");
    4 {0 M. `- `6 Q+ T  f7 x. Q* H

  9. ! ^' B# d- ?) [5 `$ j3 e
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
      o3 B; _3 G6 j0 i5 ?' W8 `

  11. $ }0 x7 z4 T4 O9 x( _8 \8 q
  12. * 生成文件到本地5 ~! o! X( m4 D4 a+ v# o) C$ {, f
  13. ! [$ j. F3 \- \( R- t& O
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
    ) }. ~9 t3 I: G

  15. 1 Q3 ]) n( c* d, B0 N! X
  16. * PS:$saveandprint源码的p6参数做了修改3 C4 X7 k( p+ y

  17. : |; J! a0 D. A0 J3 }- X! Y
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
    ' A( E. P3 g0 b, ~- I
  19. / D; n0 [' L, }) R1 q3 u

  20. 2 ]  D- u, L- o) t6 U# ]% E
复制代码

' _4 s9 p% V7 q2 M$ @& U% F2、qrcode_logo.php
& }. h$ m( `6 t: nps:生成带Logo的二维码
  1. ) O2 g+ d$ {5 Z0 W( g4 f* f1 x! ^% X
  2. /**! K& m+ j7 |" X* Q' k; t) y3 @

  3. 9 z: E5 B/ A1 J; F
  4. * Created by PhpStorm.
    . Z9 |! K8 \7 ?0 Q

  5. 4 c8 g2 l- R& d. c9 X
  6. * User: user( u  M3 C/ s" R+ }5 }9 m

  7. + e- C* v, @' c; J
  8. * Date: 2018/8/16
    9 ]9 G2 V' P- i% {

  9. & q% V- z+ {8 ^, \- l0 h
  10. * Time: 10:43
    1 Q& b. G$ G+ g6 y2 V

  11.   v" U0 s8 ~8 X7 |. q" H! G0 z
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";
    " W1 q- [# _% s
  13. 7 P* Q" r! W& L) t
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
    . T1 K/ V! {& g

  15. : O+ y9 ?3 D5 ?  B. L
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
    ) ]! v. {  {: {+ W
  17. 8 n; \. g/ I* D  j
  18. $margin = 2;//边距
    . M) y% P" v8 `/ f% i! L

  19. 8 `2 l8 s9 ]2 l/ y, m0 \
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
    + x- h, e$ H& K3 {5 B! ^* r

  21. ( L' G9 d3 z, U0 f7 x6 v
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   
    2 Z% _4 B/ B  R0 j1 Z3 d

  23. * t; y; d5 h: i% L: `: }# ]
  24. $QR = $picPathAndName; //已经生成的原始二维码图
    : F3 K# g# }  k+ _

  25. 1 ~' P9 c7 P& i+ B$ }
  26.     $Logo = './pic/logo.png';   8 b3 s  K7 B  ^7 R0 ]/ k

  27. 3 f, c3 f5 U4 x# [
  28.     $Logo_re = './pic/test_logo.png';   
    : Z) p7 Y2 E$ r' ^; L1 y

  29. * c5 i6 N- ^- X5 N. P
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   
    5 w8 p5 {& m2 a
  31. 9 Q. J) G9 N) |9 U- [& w) r
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   2 v. L& p$ |5 {5 U7 N8 N
  33. 4 C; K! ^) L! c% {4 X2 j
  34.     $QR_width = imagesx($QR); //二维码图片宽度
    , o4 s8 O) r! W- f. ^. Y' J1 K
  35. 4 N4 |6 z* A+ U6 v3 T
  36.     $QR_height = imagesy($QR); //二维码图片高度
    / M# C1 `' R' m& o, g+ W& i; j! y

  37. , `9 I" B/ b- d: V
  38.     $logo_width = imagesx($Logo); //logo图片宽度5 m; S7 r1 T! O

  39. / m& ]+ {3 m! y: q- q. ^
  40.     $logo_height = imagesy($Logo); //logo图片高度! H# i) p$ H# H- s) o) p0 }3 [
  41. ' L' a' P1 Y- X/ P& V; m) `
  42.     $logo_qr_width = $QR_width / 5;   , `8 f! Y1 b& k6 U( \

  43. ) r8 P1 F& P, Y
  44.     $scale = $logo_width / $logo_qr_width;   5 O/ }( m! o9 F1 R

  45. & b2 \; z  b7 o5 q# h
  46.     $logo_qr_height = $logo_height / $scale;   / ]" @5 x1 R# r( _2 B5 h2 D
  47. ; P" C; ?+ t3 X  J6 \8 t- A
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;
    - E: H& U$ K! F" u7 k; }
  49. 8 R: D3 _8 ^3 t8 _5 q( ]
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   
    9 K+ |# c$ q3 L1 y' d

  51. 1 Z8 L  ]4 G0 b$ M
  52.     //输出图片
    1 E3 j: D, h5 M+ x& [9 ~+ a$ z4 s

  53. # q6 o) a: a; c$ \! U2 u+ L
  54.     imagepng($QR, $Logo_re);
    # O4 a+ A9 j% [
  55. 6 v0 w5 s8 ]0 ~+ H6 S. O
  56. }5 J( B2 Y7 Y1 C& h- n% `9 e

  57. + q# _, C# K( y1 l6 j
  58. 5 x2 f, ^& ?# ^" b0 p8 w
复制代码
3、qrcode_vcard.php (生成电子签名)
2 w, e: ^' @: f, G" }! t  R$ y) _/ s1 c" U  W+ x
vCard格式:https://zh.wikipedia.org/wiki/VCard" i% o2 `4 y2 Z' L& t* r

6 q0 d, N9 F* j4 p+ A; Y

  1. ( k- b+ P% o) q, L0 \( {/ c
  2. * Created by PhpStorm.
    % ^  ~, v' N/ c3 \! P8 A" f
  3. & m+ w: s/ {% S- d7 P  V
  4. * User: user8 C" e/ C/ }# C# e2 U* l

  5. 3 ^2 _: \0 v5 z5 i8 R
  6. * Date: 2018/8/15% F  h. ]9 u4 [% x. A' ]& a

  7. ! V2 @7 L$ x; m2 \5 X
  8. * Time: 23:00
    , o- a7 o4 x; f" U6 }: K% t

  9. . w3 m1 G; l/ @: U: j& k
  10. */require_once "./qrcode/phpqrcode.php";/**: @! L7 t( z: O2 d" |" i9 d/ p7 j

  11. 7 I3 O' R/ r' c6 ?  H+ b
  12. * 生成电子签名. e- ~% M9 B/ j2 x* I8 k! d
  13. 7 {+ A4 Q/ }% X0 w
  14. * PS;使用微信扫描二维码
    ; M9 ~0 a; G0 b$ w& Z: g7 W
  15. ) `7 M& p4 W9 m7 Z- V
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志
    5 Y* z& ]% a4 h3 m$ j$ t" L' z

  17. , V5 }2 j3 b9 R0 f- y  Y
  18. $content .= 'VERSION:2.1' . "\n";//当前版本3 z9 Q7 r, f' t7 d

  19. " C. A" P2 x  q4 e& T7 Y1 P3 R
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名9 J% n2 V# p& B+ G3 \2 d, {' c! L; R9 k0 k

  21. 0 s! N& J3 A/ }. \- l/ b$ x
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称$ u6 F* l# k3 Q3 t* o
  23. 9 c3 c# R7 R5 a) P' O( A4 @, r
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位
    ! O/ \: I: X) V3 ~0 B4 q% E

  25. : D0 s1 H. t" i* j/ x# a' J
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
    * C" I. o2 W& t1 n

  27. 5 s- T# [; I$ |; X& _
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址: p+ Y: o" D2 ~; e9 K. @2 q# w: f! H

  29. 6 G6 K% v7 U+ I$ Y2 c! H3 I
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)# z7 H  ?- f( Q9 p- \" X* k6 E

  31. ! H' n! x# ]5 l2 D
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话+ y3 w8 B4 A: Q& s2 Q6 O

  33. 3 @: d' Y8 l8 {+ f. Y& U" l
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱( B" |% h( _: A6 Y( y
  35. : E7 c" ?$ ?% m7 ^! y
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页- \9 O2 T9 C! R7 Q! |% E( D7 s2 w6 H3 D
  37. 0 x, `; u( [# V7 n* a; E9 _0 a! ^
  38. $content .= 'END:VCARD' . "\n";//结束标志
    " j! ?4 _1 i% r+ s

  39. / C( l5 c' G0 t0 l( s
  40. QRcode::png($content);
    9 H" i# Q' o, p* E. B# W' a

  41. , b6 _, o* i1 j0 G
  42. 2 n# d# u* m$ k& }! K
复制代码

* U: Q" e9 ^! D. a' L6 N5 w相关文章推荐:3 _" n5 `) r& j* j2 O& V' U
1.PHP生成微信二维码实例
6 ?9 r3 m" O/ ~* h. R/ n! I2.php网址转换生成二维码
& p) k1 t+ i9 y: @) ]3 ?相关视频推荐:
' g/ c( `. G7 f7 d3 m1.独孤九贱(4)_PHP视频教程" M+ [- o6 k  x$ C$ I
二、JQUERY生成QR CODE' T8 B+ h) d8 D) N  w) l
源码地址:https://github.com/jeromeetienne/jquery-qrcode5 y1 ?0 \% u2 W' N3 V

! f$ _7 f& n# o8 e" S/ O, bjquery_create.php2 r1 j9 k8 ?, k8 @3 J: V

+ t* J3 g( a! {* j% Z4 F
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码

4 V, R$ Q" r$ S) r三、PHP识别二维码3 o" `6 l- Z# m6 Z' Z7 R, O/ U6 W
1、方法一; l' O. e! x1 |) r4 m
环境需求,安装如下扩展
6 h& K! v, ?( H$ Q6 J- ImageMagick
8 A- g" v/ ?* P, @# b( b! e- zbar
6 d! c( B2 ?8 ?- php-zbarcode
% v( v4 s+ b$ r2 X3 g- E9 s1 c( c4 [$ O6 _: K0 l. [
2、方法二
8 B) S* J0 j% zPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以' x9 V4 J3 B4 P8 G/ v
qrReader类:https://github.com/baagee/php_QrReader
, _- n8 Q( ]) B
) Z; F7 R% M9 I* D/ d

  1. 7 e  \, l- l& b  I
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径
    ( W9 Z. q. D2 F8 n# ~- ]

  3. - a) S& ?  r& F. h2 N) R
  4. $text = $qrcode->text(); //返回识别后的文本/ j& T9 c6 N( i$ \* }' K  }

  5. 7 L+ l: g* A) b* j
  6. echo $text;
    * m9 I. W- p- n9 ^/ y
  7. ) t0 G) j/ E; ^% k

  8. ( @/ M3 R0 {! q. ?$ _+ _3 n9 _
复制代码
: M, v6 R5 o# f6 B! M' o! a
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
+ |; V0 l) j0 i1 o, Q5 C4 G6 S. e. C" U9 K+ p/ B% _, m# j& O

+ ~' P. z3 K; l
0 z" O) t+ s4 `6 G, n6 r0 Z. w$ z$ Y, F$ Q8 [- T+ m; y
. t$ E* L! Z% I7 D
. B$ N$ e1 y2 t: p: o

5 p, a! c* B; q8 w9 [; ?' N4 ^
" S+ N: x$ _) C: M# Y! s
3 N; Z/ R4 [2 l% \, r  x0 S. R




欢迎光临 cncml手绘网 (http://bbs.cncml.com/) Powered by Discuz! X3.2