cncml手绘网

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

作者: admin    时间: 2020-7-24 00:09
标题: PHP如何实现二维码的生成以及识别(代码) ------------------...
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
0 U) M0 W8 l9 n4 \/ c---------------------------------------------------------------------------------------------------: ^, d2 F6 f8 x( ~- I9 s5 {) u
二维码的分类
6 }9 x( U8 H) v/ j5 ]+ }8 G线性堆叠式二维码; k& z6 ~7 ?1 x. I  ]3 I

$ ?- H6 c2 ^4 H) u& y矩阵式二维码, l( l; Z% ?* t& k8 Y
  U9 e1 f! E! L. A8 W
二维码的优缺点$ G# n, E5 ^. s% w
优点7 W8 X: L  L4 @1 M/ P
信息容量大
# v. S; |7 q  p5 X! l
( A; a* R. k2 \3 f+ A6 O) t1 f编码范围广, c& ^1 q+ S  o4 z

! _  h, u$ T6 |+ e' i1 D容错能力强* O8 J/ _' S  `

% U, T+ p) f% g5 G9 U9 _, r% r译码可靠性高
  v% Q9 h6 z6 z3 T( D0 x
( N3 J1 `1 o# x+ [' g可引入加密措施' }7 k) z; f* B1 D
) X4 z8 O' E8 \) s' {$ S
成本低,易制作
7 [$ v, q  d1 @" A% L; c/ |
  o) u8 ~1 q% y2 P( K2 e缺点0 ]- ^+ i* T4 ^1 O, \
二维码技术成为手机病毒、钓鱼网站传播的新渠道% U3 V) y5 S2 U, ]) d, O
5 u$ j1 h$ A0 X
信息泄密  \" F% X8 P, o8 ?0 c7 U" {

+ {1 W" F% I# [目前流行的三大国际标准+ M$ c' f0 B0 r0 L* A1 F2 p% Z
PDF417:不支持中文
# e: w! M& z0 ?* ]- l* z& o  X6 \9 T5 g! @% z' T8 b# F" J3 r
DM:专利未公开,需支付专利费用2 N! u5 Z: [: F% z+ w( P

- G6 I5 E5 T5 O4 k  _, R1 NQR CODE:专利公开,支持中文
0 `- @9 D; V4 m, m5 d0 H) h5 R8 G% d+ D
QR CODE 纠错能力
; s' P' ?0 x9 h3 sL级:约可纠错7%的数据码字! C/ y) f( {7 m7 r4 B
# |8 q4 `' \7 L
M级:约可纠错15%的数据码字
2 E/ F% y( L/ p' u% M% ~7 Q; E& h. s2 L5 B' |- b$ u2 A& v  z
Q级:约可纠错25%的数据码字
6 \0 m8 w& V2 ]# s4 ]* R, u) D# t* Q3 ^7 L
H级:约可纠错30%的数据码字9 R1 U2 J. Q4 u7 {
: j" G& a1 d) _7 ?) t
前提条件
5 E7 a. A6 P) I8 QGD库
  K4 l3 B% D+ m( [2 M. S6 ~$ P* e* p6 R, ^
一、PHP生成QR CODE+ L6 i  s+ q/ L; t7 `
官网:http://phpqrcode.sourceforge.net/3 H5 B% R/ N7 A- b

3 o) G; C7 h& _下载源码:https://github.com/endroid/qr-code' w, H* L/ g$ n

+ Y/ I8 a9 Q. U. s目录结构
9 N9 O( A* r* [9 ]* `
' h, W# r; Z0 P6 ^! V% j# t  l9 f6 {, v2 Z+ F
1、qrcode_create.php+ W7 W- k$ ?8 J
ps:生成普通二维码
& \( H$ v# F% \2 S; q. k

  1. 0 k; l* e! H4 w8 Y+ {
  2. include_once "./qrcode/phpqrcode.php";/**
    8 d$ z( i# w8 {4 E

  3. % R: t# u/ c# I! ]! E% X: n
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
    5 s- z3 q8 ^7 U: L$ L/ a

  5. 7 ?5 p3 x% y+ r' u+ p/ l$ Q; F
  6. * 在浏览器上直接生成一个二维码(内容为abc)0 Y8 R* U5 h0 I
  7. 3 c- e0 ^5 A3 Z" G' W9 j% A8 A. h
  8. */QRcode::png("abc");
    / q: b/ `) j4 d- A( K* X4 k

  9. 0 ~7 |8 g2 J. j! l
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
    + E. _! m8 z, k# s* F+ {7 |/ a1 `
  11. 8 P1 U4 u* X; H. |! S: F+ @
  12. * 生成文件到本地! l- r/ S$ g7 }8 f2 g) n# _

  13. : x2 O4 y9 P0 R- x, g3 A( [7 a
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)* v+ f- C6 I: ^8 r9 ^, C

  15. % b4 M1 B& P: S. w2 B. R5 F; p) C  ^% e
  16. * PS:$saveandprint源码的p6参数做了修改
    # T1 L6 o$ p' D1 `3 N3 ^/ D2 K

  17.   m' S: \9 W# K; S( c) U
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);" ^. w3 z5 J( g6 P

  19. - f6 \9 k, G1 Q/ W

  20. , K* @* O8 l* H+ h
复制代码

1 O7 `- V) y; E4 V2、qrcode_logo.php- q) a% M  i) R7 _9 v! a7 F
ps:生成带Logo的二维码

  1. * J0 o) `$ d1 x* r: E* v& p
  2. /**2 O$ D+ J2 ^& l# V2 `
  3. 5 d$ u- m/ }7 {4 ], H
  4. * Created by PhpStorm." D& s# T1 {/ g
  5. * a8 S& ^* b) M* I4 |! _! ?0 H
  6. * User: user
    8 C" Y: x2 A; ?  y: J3 y0 o

  7.   E4 q: r$ b* ?2 X* Z6 I
  8. * Date: 2018/8/16
    " x; q6 ?# y/ v( h  O

  9. 7 p- J: y9 Q3 k& A
  10. * Time: 10:434 h- w+ Z8 ]# k3 p/ f
  11. $ |7 e5 J# P# t% o
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";, I2 k# F8 p' }) Z- v7 c% o3 \

  13.   z8 i, f4 ]% v
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
    6 Z7 y+ P  M  z& v! h: i
  15. + |5 z7 D6 b' f- s% |
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
    . _+ q, E& L- {- H4 y

  17. ( ~' @7 P: s- K% Y
  18. $margin = 2;//边距
    4 L; y& q/ ~  f- W/ }

  19. 3 }  b; O) i8 c' f+ S3 j- E# X, ~
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
    2 u- @- p, p; O/ w% b1 u
  21. # E, t7 z9 \$ B3 O, ], p
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   3 N5 p1 ~. F1 Z
  23. ' D! s, ^$ T5 O( m1 W7 \1 O
  24. $QR = $picPathAndName; //已经生成的原始二维码图; f; f% t. U2 y4 c& _, q0 x
  25. # x0 q# g: W  _9 P1 K$ T
  26.     $Logo = './pic/logo.png';   
    * P* y7 R  @6 t4 R; b7 N( b

  27. ) l7 P3 E5 J. g7 e' @) f
  28.     $Logo_re = './pic/test_logo.png';   
    - D# B+ {7 K" s+ r
  29. 5 V2 S2 F: E' o+ L2 ]
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   
    0 l' I5 P) N3 }

  31. 5 ^- w1 G' @! c8 n" C
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   ' o. j9 |# N, R% u1 X8 ^
  33. 7 F* T- [# Z; K8 ?' J7 O
  34.     $QR_width = imagesx($QR); //二维码图片宽度
    7 F9 m# I( ~1 O; m$ {3 A
  35. ) j" s& E: C2 W4 V5 {4 u' g
  36.     $QR_height = imagesy($QR); //二维码图片高度  L$ |& E' c. C

  37. 0 Q* p7 r+ N# b. i: ~9 Y) C7 Q
  38.     $logo_width = imagesx($Logo); //logo图片宽度' X4 F1 K& B/ U7 R2 m. I$ S* V

  39. . v( N; U5 M; G/ |
  40.     $logo_height = imagesy($Logo); //logo图片高度! p; J, ^' F1 Y0 v

  41. ; @. A! v% Y: p
  42.     $logo_qr_width = $QR_width / 5;   0 b& f2 T$ {0 G+ o0 Q7 g; h
  43. * F9 }; e1 C* `% T, h$ x! ]) K
  44.     $scale = $logo_width / $logo_qr_width;   8 |2 I; D9 w2 Z/ E; M: Q
  45. ) t$ P$ s  d9 y5 \
  46.     $logo_qr_height = $logo_height / $scale;   : L, }% `3 s/ j
  47. & `5 X& _+ A8 V: k( W( E) l5 V
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;+ [3 U% O' x2 n2 z( N, w

  49. , `- }. S# |. ?% ]. U+ g1 I
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   
    % h2 [, W0 C+ H

  51. 4 w! Z5 D) j5 M2 a
  52.     //输出图片
    9 X3 r: {+ \& g1 }# \  N: l

  53. * ]4 t) M  W7 K) m& t: E
  54.     imagepng($QR, $Logo_re);
    2 h6 C# T% f8 Y0 b) ~

  55. * [/ H* W( Z5 {4 k: Z# ]  O' ?; i
  56. }
    3 h+ j8 p7 G( G0 A) `
  57. & p1 H0 {" p/ U. o

  58. ( m( ?. b" B! d8 N4 G
复制代码
3、qrcode_vcard.php (生成电子签名)9 g" ~5 K9 x: M6 G2 V. J* F) {$ R3 j
6 |; T9 k3 F2 R' v, T# x
vCard格式:https://zh.wikipedia.org/wiki/VCard
1 |, i3 g0 V0 F# v3 x9 I0 P' @( Y2 R
8 ~; j) C. y6 e1 U4 ?

  1. 6 M$ A. O7 t' c
  2. * Created by PhpStorm.
    / |4 Y- K$ R9 G( X# v* }% W
  3. - h3 }# j' Y' o0 G) F5 }6 `: g
  4. * User: user. ^! V( S0 r; t) |! R/ X; ~

  5. ; a& I: l0 g  c* p5 g
  6. * Date: 2018/8/15* W* Q, j9 c9 v! F, E* A

  7. " Z. _2 M7 X- f$ u9 y2 t
  8. * Time: 23:00
    2 }" [& O2 x+ r' ^1 z. y
  9. 2 ?2 q! J9 E1 ]' U: [8 N
  10. */require_once "./qrcode/phpqrcode.php";/**5 i) S5 J" a. I7 g& q& X( f4 K" ?8 |
  11. 3 K  G9 M. w) I  E/ @
  12. * 生成电子签名6 P# \4 I; ~4 k- e5 }

  13. 1 r% n7 c- M; }
  14. * PS;使用微信扫描二维码
    9 R* r# f! p# Z* z! |
  15. * [2 }: B1 s% O8 L& f9 k
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志7 _7 Z5 x& H. u& }
  17. 6 r  U+ h8 A+ {) l8 ?) `
  18. $content .= 'VERSION:2.1' . "\n";//当前版本
    - G0 _! k$ @% z; X
  19. - M( X: C* @8 d. @- t/ t' s
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名5 o9 b- d. @" P

  21. 8 H1 Q7 d* `3 ~8 q4 u. M, R- s
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称0 b! @" l: Y' A" ^( l

  23. / q, Q$ I: ~- L8 S% \
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位
    ! m! V2 d- x2 P

  25. ( x$ U7 G$ g$ d% ^1 C
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
    / Z/ \; |) V  l& m. z: r2 {

  27. & j+ L$ B$ s7 Z, |
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址9 n$ l, ?- X( d# ~, l

  29.   K9 H; c7 {3 S* ~7 x
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
    ( A0 y, N$ R  z- n4 {

  31. + H8 f" g/ z4 s. I8 V1 S
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
    " H0 @1 M+ M  @) M8 z; [9 k; N

  33. 0 r# ?- w+ y! {+ u; W2 ^4 d
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
    4 z* U' {6 m6 A, i; ]! b
  35. ) e4 w& A! K; O1 I" R* t+ }" o
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页
    * n7 R% m6 r# N' Y/ _7 l6 H

  37. & u4 d! _0 m! D+ u7 S3 u4 r, S
  38. $content .= 'END:VCARD' . "\n";//结束标志
    ; L$ ~' L* [! s& d; ~
  39. % H" Z& k( {- |
  40. QRcode::png($content);
    7 V/ j* Y, J' _; e! c0 Y! A1 g5 Z
  41. # d7 _& E/ s& J3 p

  42. ) ]/ _2 T( @+ g, j
复制代码
/ t! `& U7 s# ~3 j7 h
相关文章推荐:8 R- P( Z* B4 V1 c2 Y# Z
1.PHP生成微信二维码实例8 r! A6 y+ R: N- {7 V) l  b8 O" C
2.php网址转换生成二维码5 w( n1 d, |6 n5 }
相关视频推荐:# v, s  s* ?' v3 \' j4 X1 N
1.独孤九贱(4)_PHP视频教程
  f- E2 B% @5 H( s. {二、JQUERY生成QR CODE  a1 u6 U+ A& _+ n1 Z2 `
源码地址:https://github.com/jeromeetienne/jquery-qrcode
" J# f+ X" o( {. l" N0 Y
  K+ o& |9 e: |' p. rjquery_create.php& ~  m" T6 g  p5 F" l8 G

: X5 M4 V- Z* k* j
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码

$ b1 @& e0 A- ~4 }! j- Q三、PHP识别二维码7 x1 F3 H5 n: T8 u7 G( F
1、方法一- T& _2 }! h* i
环境需求,安装如下扩展. e. ~3 `0 ^3 o% \, |
- ImageMagick
* {+ G) Z3 ^' p1 E5 t3 s- zbar7 o! M) j  _: b
- php-zbarcode; Q; R  I5 y9 @8 @3 f$ E, I
% G# Z) s: f* {& r' S5 B
2、方法二
' s" }* A( K. u' Z3 _PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
" f- i# a5 f6 p. w+ tqrReader类:https://github.com/baagee/php_QrReader
; a0 r7 Y  |5 _, Y* S! a- b; {0 U# y% N4 b
  1. , f7 J- H: z6 }! n$ q) T
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径" `7 ?" Z/ y  i7 S& {( |" O' w# ]

  3. * u1 V! r2 w! D& m4 {! a+ h
  4. $text = $qrcode->text(); //返回识别后的文本6 Q$ {# j6 X7 r) o- h2 [% Z2 @2 U9 r
  5. + }: [/ R9 V9 Y3 [7 l7 G! d
  6. echo $text;( O! V4 `* A6 _! @: X
  7. / k/ s6 [3 ?$ Z* c& w" d

  8. ' ?( P0 B5 v  s) Z9 j5 C. z: N0 T
复制代码

$ p3 U. ~( m' x" V+ O! Z链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
+ d% R! y* B$ O) ?( n& }' q: ^5 h. G8 v1 T; j

' I2 @( T% A. B% y' d
/ q' K/ e% |; W2 D# N
; [) c: l/ J! C" C( ]. ?1 E( U" L4 A; a  u; v8 \7 \# P
5 k$ ~; U3 @$ T1 T. u
+ X# s* X; D0 u4 c$ a( s
+ R" }  o" W7 {
4 S$ @% G, M+ ~- Z+ w





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