cncml手绘网

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

作者: admin    时间: 2020-7-24 00:09
标题: PHP如何实现二维码的生成以及识别(代码) ------------------...
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。7 h5 O7 j. S0 ]% X
---------------------------------------------------------------------------------------------------, n8 P: X# W8 B7 O7 }
二维码的分类
& d. h- B* }" z2 R: T- y( S( v  `( n* |线性堆叠式二维码; K+ P* }4 G. G. ]1 X2 Y' @5 P* {$ Z  v

( K4 x4 {$ \+ |( P7 D' q9 F矩阵式二维码6 J1 f1 \3 A" ~1 C4 T
* I& w% L" i( ^6 ]+ S( c6 ]
二维码的优缺点
2 o' K+ d- L# U$ \优点% y1 E8 l) [% M; H
信息容量大
/ J- W0 V' _" Z2 L, e* B9 X" }5 P" N" u, T3 X; j6 C; s
编码范围广& d- _3 S: O" x. i4 F# W

! c' K0 @: K$ h) N1 x% |! Z容错能力强
9 L$ q1 a8 w8 z" y8 B
" Q: D' K* K/ [  s: o译码可靠性高  B; y/ D) v; h" O$ S. `8 u0 x( `

0 C  w2 C0 r% P, [可引入加密措施
) Y5 W4 ~" D# r) l: y7 ~, J6 l6 R) s3 a/ W/ Y2 t
成本低,易制作2 k0 Q0 y% K& J: F

  s" N1 x# l  Q+ Y7 `缺点
$ z5 U/ c; N% \二维码技术成为手机病毒、钓鱼网站传播的新渠道. o1 \9 K8 |. W9 x

% H' w) j2 T6 `' n+ d. ?$ a信息泄密8 b: x& a/ C, c, @6 W. o
! r7 }( o* `# X
目前流行的三大国际标准5 x2 H, ?0 c) q* x
PDF417:不支持中文/ h' f- t& b7 x5 C; b

/ g0 V- V- E3 b# y4 SDM:专利未公开,需支付专利费用% V$ o8 A) L0 [" K* e( t4 t
; \0 _  _6 d; K" @( R1 I( E
QR CODE:专利公开,支持中文
, F; |! t: Z; |: D5 C0 K: e
. u- {0 X! U: Z0 m. u& |& Z  i0 y! lQR CODE 纠错能力, U- u, L1 |0 p+ h1 e  V+ |9 |! u. f& m
L级:约可纠错7%的数据码字- u# ^, k/ |5 l7 G& [! X
5 Z' b8 h* n3 a( a
M级:约可纠错15%的数据码字% J& t9 m5 C9 C8 x. \# y$ H' {

, I8 q  [7 |- {: n7 I" Z2 nQ级:约可纠错25%的数据码字+ w; A/ ?3 l: e% r
/ |8 r. `# _' H5 \
H级:约可纠错30%的数据码字  _$ A5 j7 I/ _0 M! P3 f
% R0 p, v/ [2 w$ B& q3 {4 W5 U  F. f
前提条件
8 K8 I6 q. X- C* AGD库
: ~: |, m- T7 M
# E% K- R+ j0 k一、PHP生成QR CODE
. p1 E" q( B1 H$ h  e4 h7 h官网:http://phpqrcode.sourceforge.net/* ~/ F9 T+ m* p

& s- |+ ?9 A' k下载源码:https://github.com/endroid/qr-code
9 _$ {, q8 X. [; g6 a" ^+ \( t& {5 ?. b
目录结构
; e8 j# T( P* K, c
  b2 b# j: }9 W( Q- z+ q% o" L  h% D. G3 e0 H1 @
1、qrcode_create.php# P" Z" `1 l  r0 j. o; b* l' }7 E8 A
ps:生成普通二维码3 z  v* R( _! {( t  N

  1. ; {3 n9 G- z" p. [+ Y
  2. include_once "./qrcode/phpqrcode.php";/**
    " \9 u: b7 z2 C9 B  `; `
  3. 0 U! @) g7 m+ k9 \4 r
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
    $ l) s) E# O: v

  5. 2 D( u+ S8 ~/ z
  6. * 在浏览器上直接生成一个二维码(内容为abc)
    8 L0 e% h+ L+ r! l2 B

  7. " |5 M" r# A2 }9 `3 m: I
  8. */QRcode::png("abc");
    0 K7 z6 G+ {# v* x! S6 E

  9. : u0 n/ N0 @3 x6 I" H
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
    ( X  u' n; A" {9 A( I% U

  11. " `0 e& n9 E. W* H- {4 B" p
  12. * 生成文件到本地
    8 f  ?( b  c5 s' f
  13. # w, ~6 d( Z) ?5 T7 e# P5 Z
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
      d5 S7 E  Z$ }3 y' U
  15. 5 M# q. v' d, N
  16. * PS:$saveandprint源码的p6参数做了修改
    5 X: B9 A# O, H* }" P# G1 V0 _
  17. " v- K" \" R0 R! Q2 _1 F; r
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
    + N1 q$ V& w, b5 o4 E
  19. 8 d# E- h9 c6 `6 h' w$ {& y; f

  20. ; }% A/ S) H' b; c+ b
复制代码
+ Y! V6 _$ h( T5 @( E; G0 B
2、qrcode_logo.php( I  Y, n. [  J: J+ G& u0 K* N
ps:生成带Logo的二维码
  1. # P& I; l! _4 K8 f8 e3 B! ~
  2. /**
    & r) W1 E7 }; d  C3 k

  3. 7 \0 ]/ R$ g) }6 P- l
  4. * Created by PhpStorm.
    0 n! V+ |* S4 ^$ w; h/ l0 G
  5. 1 C- ]' |1 {* z* Q9 S2 z6 M
  6. * User: user. q6 `/ P3 N( w" G/ e

  7. " r! R# |- p; `$ O8 j
  8. * Date: 2018/8/16( z6 c1 g6 V9 w% W  J0 P8 R, s
  9. $ m4 B, d/ \- u% B' K! p. C
  10. * Time: 10:43
    1 R6 j/ {* C- }. O" z8 X

  11. 8 j) C4 L) y' ~# K$ l
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";
    ) T$ G6 i' r6 |: g3 Y* f

  13. ; D% w" Q; v$ e0 `! c; H
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
    0 \1 }5 h% S) B5 J. e
  15. + |! c% A6 x! C, T4 R$ t7 n
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是2 r2 W. v1 ]; X6 G7 T2 c0 z3 T1 g6 w
  17. ' \# }% S3 p6 C7 A" I9 o5 V0 M; h
  18. $margin = 2;//边距
    ) Q4 {+ W4 Y+ U2 h3 J. S! W

  19. 6 X1 {+ g3 ?/ q( i3 u3 R9 y5 Q  r
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片) u% Q5 P1 z8 W" s" Z

  21. ! |3 ?1 y  Z1 m* P
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   * B7 q& L: m6 M3 `7 f0 r
  23. 3 P, M3 \: l3 [6 t$ r. z
  24. $QR = $picPathAndName; //已经生成的原始二维码图6 Z  `1 S9 R/ r

  25. * _6 i; a2 |& U/ O1 S6 C
  26.     $Logo = './pic/logo.png';   6 {3 C. N- o2 r! ~( w' X! L
  27. " @9 r  J9 i; V1 d! [
  28.     $Logo_re = './pic/test_logo.png';   
    ! h- V% U1 H* \( d, J
  29. ( O# x- j7 I! U$ E) O
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   8 }( n& ?# I3 t, m9 M5 T
  31. / a% b2 L- X: s1 w9 t7 [, G8 O
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   
    0 D1 `. N  I/ q2 a
  33. 4 K1 z+ D5 {4 o3 |. c! b
  34.     $QR_width = imagesx($QR); //二维码图片宽度, o, i. ~. o  I: K: w8 i9 h
  35. 3 H' C! A7 W+ x9 \. Y# w: ^3 X
  36.     $QR_height = imagesy($QR); //二维码图片高度2 @7 [0 ^4 y5 c7 I1 d5 _
  37. ( s1 r5 z9 N, x0 b: @3 M' R9 c; ~" y
  38.     $logo_width = imagesx($Logo); //logo图片宽度
    8 N# c: B' V1 B3 f+ A
  39. & z' N" U3 D( d& R- \
  40.     $logo_height = imagesy($Logo); //logo图片高度/ j0 X& n7 Q0 H) Z
  41. 2 ?& r; d6 |# g3 ~2 _, ~& {
  42.     $logo_qr_width = $QR_width / 5;   
    # i$ D# i0 t, e
  43. - }0 V3 _- g, W
  44.     $scale = $logo_width / $logo_qr_width;   
    - N& O; J# Y  g- Y
  45. , Z' e7 U2 r" W8 U5 I+ z
  46.     $logo_qr_height = $logo_height / $scale;   
    ) K* n) b: r/ B" m' i- K8 Q" {$ L

  47. : H, U$ Y; ]; a1 d+ p# q
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;
    " o& E- ]( T* f/ {

  49. 5 R+ W7 w0 N1 }9 }( J* x$ X5 j
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   
    7 {9 H2 B5 _. ~. h+ T

  51. ) k0 ~  i/ v4 o: q' P
  52.     //输出图片# Q5 i0 v$ k2 U3 B2 t

  53. ( T9 D$ K: ~! m, E. w% H' F# Z
  54.     imagepng($QR, $Logo_re);0 O# ?% k, w7 a- W6 X0 o1 q1 K

  55. ; N% j- S, O$ b- B! t) i
  56. }
    5 F* b( _+ ?# e- e, @2 T; A4 Y
  57. " I3 u2 F! [6 t( @8 L5 N. L3 y

  58. # @+ O+ Y1 q# u6 @
复制代码
3、qrcode_vcard.php (生成电子签名)
7 E) T# n5 m$ W6 \2 h! L* L3 B* H* C
' w2 E/ B8 |& D' yvCard格式:https://zh.wikipedia.org/wiki/VCard- g6 h9 n6 _0 k3 {$ i1 a# \

; p' p$ [& J6 P- S$ u+ O5 M8 _
  1. 4 b, l6 }" I) [* t3 i( U5 v
  2. * Created by PhpStorm.) z5 ^- s& `6 |5 N
  3. 2 v" K, y$ |' \$ Y
  4. * User: user$ Z" C+ G$ T( }& ~% A, Y; Y' ~1 q8 C

  5. 0 b! }, \, o% z) H$ z* |3 O
  6. * Date: 2018/8/15
    . U. V; j, T' s( }; s% _! y- a" l
  7. , |) j/ j0 X/ Q& F( B* k
  8. * Time: 23:00
    , X( v: t' S$ f# l* J

  9. " W; m+ w9 E% |0 U* e
  10. */require_once "./qrcode/phpqrcode.php";/**3 C% q! E8 D( b- p/ K  W

  11. * W. O! A9 ^. f& ~
  12. * 生成电子签名3 X0 w# G3 M% v" V; @! \& G
  13. 5 @+ c* u6 x1 _) F0 h* b/ S
  14. * PS;使用微信扫描二维码
    ' ]' d5 X7 k6 `  ^

  15. # r1 W4 J5 s/ R0 i
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志
    5 ~( E9 b: i: s
  17. ) Z6 \# ?* l" B! [9 Q
  18. $content .= 'VERSION:2.1' . "\n";//当前版本: ]- U  J% S3 k

  19. + g' d: k0 Z" }6 f
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名% k' H* J6 ~. [
  21. ' L- o/ ~1 h) h- n) d' }" O
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称4 ^8 B; a. m, U. Y" q% h

  23. " }: Y; r+ o4 k  T/ q* w' n& S
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位& [  |0 ~2 E4 @9 a2 J
  25. 4 a7 U1 {( q1 j9 {2 y- h+ t
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话7 Z1 o- ]& V5 |+ V

  27. + w; F  y2 u# P9 `' H
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
    9 Y5 H& g$ U; Q& i  z  P1 U

  29.   R7 W4 d5 `2 Z) ^$ c& o% U1 O
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
    ' {9 Y% K* `- B* Z

  31.   z- X! x7 ~  b9 k: Z* o
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话+ L* Y$ F) p5 Y
  33. ; t" A* L* R% N3 T  O1 I
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱. h, x, b/ K( l7 P& D/ g

  35. ; R) m# X7 y( u' l+ w" _2 R4 D7 s
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页: {. `5 S7 k2 J& w# G* {

  37. 9 o9 b+ z: M# x
  38. $content .= 'END:VCARD' . "\n";//结束标志
    8 _, g0 D9 d5 p: P& Z  g. ~% O2 F
  39. . M( M, ?! l! n/ e7 R2 y/ x
  40. QRcode::png($content);
    & X7 s) s9 p8 A) ?. L
  41.   y: t2 e# t" C% W- ~: A

  42. * \  h4 i% a4 P
复制代码
$ U# x5 j) m7 h" Y- S
相关文章推荐:
9 ~8 G. E: j& z4 D1.PHP生成微信二维码实例
. Z6 s: z) j* o( g  u6 ?! H2.php网址转换生成二维码& r) J& O7 \- z! M# a7 K
相关视频推荐:0 V3 s; K  x  j# ^4 F
1.独孤九贱(4)_PHP视频教程
3 U" H5 Q1 o9 V7 ^$ d/ M二、JQUERY生成QR CODE5 J1 F7 t; i8 p1 W7 {
源码地址:https://github.com/jeromeetienne/jquery-qrcode' D8 ^) ~6 a; g+ s  _5 R

& O% D4 }. _. k! \jquery_create.php
" I) v. X- @6 a4 G% f4 z, K' n* D* M- N5 V- I$ Y
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
+ C9 k+ y8 f/ ^& ^
三、PHP识别二维码
! D5 h0 c2 ^! ^/ U1、方法一- L8 E! g1 H7 Z
环境需求,安装如下扩展$ b4 F% F/ t9 c) E& F
- ImageMagick2 [+ G9 |# E- q% o! h" f; H  G
- zbar
/ B9 }/ w% {: a' H6 Z$ e' }2 E- php-zbarcode& D& ]# L. J% B! H) m5 f( i

- I9 a8 E9 ^* g' p" [8 p5 @# u) C2、方法二. N1 N+ x2 e# i- z
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
& U9 z( d; S" W1 QqrReader类:https://github.com/baagee/php_QrReader
8 ~4 L# @' F* D" w5 d9 k/ Y; P4 g  [8 F8 g1 o5 [* H
  1. ( P+ M' W0 [+ X7 D/ B8 j# ~
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径
    3 a* k0 q4 u. c7 ~7 L
  3. ) }  j4 r* x0 r; D& g9 D
  4. $text = $qrcode->text(); //返回识别后的文本
    " n/ V4 \. A  ~7 [

  5. 9 ]) n0 u' m2 y7 a" t& Q& N" B) k* U
  6. echo $text;: C+ F, O' ^+ k* y: _

  7. 2 r4 L2 [, A( S5 y1 R, s

  8. # @. Y2 I& d8 I. F
复制代码

+ a0 z% b* U9 y+ j" }7 k链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
, c- U* M# V- }( t2 A
- \% i2 G- G. p8 s3 S  ~! x/ D# f0 x! X( y& O: @: g
' ^5 J) @! f; A9 u
# A9 b- x0 ~8 K  c

& V. i( l  m$ a1 E4 Z) _2 |6 {/ x0 f6 I9 l" N$ k0 _$ l

5 J! @! ]3 q" r$ `  r& F6 Z0 z* j

) t3 A" h; U6 Z" R* }




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