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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17850|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-24 00:09:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
& M4 Z$ I5 k3 P: c- _---------------------------------------------------------------------------------------------------: p/ @) o) M4 t
二维码的分类
* ^) Q% ], m( N线性堆叠式二维码
% b: E% ?9 L5 W
/ L( |6 S( ]( X+ K/ y0 T! E矩阵式二维码
& c& n, |* K5 p1 P  s( m4 M6 O+ N% B
二维码的优缺点
; i+ ]3 a+ h8 B# D! T/ q( G优点
2 b' H0 j; G7 }# C  K信息容量大
3 m0 Y9 [. ?: }, C6 D6 l9 }; z7 l2 F: }0 o; [5 Y6 O
编码范围广4 a. u6 |0 X- b7 \2 u

. e2 x/ h* I/ r* i$ ^" ^容错能力强
9 K: d6 ^& N7 Y% D& J; N# P' U, }3 ?) Z2 j$ \/ ^) P0 ^
译码可靠性高
/ [4 T" G3 k2 r* T0 d3 P& T* w% n9 ?
可引入加密措施5 e& W& M9 }" \0 P/ c
0 |! P/ A2 P6 Z8 ~( U9 y
成本低,易制作
: w7 N' F* r0 Z: _( c; E' Y: m) z( |+ L
缺点
7 W+ b6 S6 P1 R3 f* U二维码技术成为手机病毒、钓鱼网站传播的新渠道
, G& [( P6 J3 t1 T! I4 N# \, g' t( E: V' s0 x7 Z* m6 e
信息泄密
( P( I/ z9 j- B/ H" w0 l) F) Y, ^. \
目前流行的三大国际标准- @4 s. R5 p* R' E
PDF417:不支持中文
6 N( b. w8 W% V/ J4 v" ^( M) E& i4 X1 c* ~% @5 ?
DM:专利未公开,需支付专利费用
0 [5 u- n, c& O( d! \1 @3 |* I  a1 x% v) Q
QR CODE:专利公开,支持中文
! N% e; M6 Q- n1 Z9 i2 G& n* I8 I4 l1 c
QR CODE 纠错能力8 D* m# v' a+ _& L
L级:约可纠错7%的数据码字
7 ?0 T: H$ |  g  M! A' e: O
. f8 d5 V: a9 I4 c% _M级:约可纠错15%的数据码字
0 m* ^6 O' s+ _6 _' ~
. N7 P* l3 t- t& U5 \( p% y4 H' ^Q级:约可纠错25%的数据码字0 b" O& N+ o' [) a
, U  w' o* I5 y4 y- `" r
H级:约可纠错30%的数据码字3 o9 I  Z5 n; T, S- _! Z

2 ^( M% g0 v$ {0 [% s前提条件8 ?2 N$ N1 Z: \
GD库
* K3 F  i7 V" M5 z8 p
& R7 H0 t3 r  F2 y一、PHP生成QR CODE
1 Z, o% |; q, I! \( F4 O; V官网:http://phpqrcode.sourceforge.net/5 K. f% i) Z' f) X

5 M/ A  q$ H- b2 y" Z下载源码:https://github.com/endroid/qr-code
: e4 f/ }1 w- v! `* y2 D7 _" U. r1 X
目录结构/ A( P1 m$ R1 p( L6 b
* ?  R$ E( t' j7 P; {: q

: ~0 ~8 K$ S; ^4 n+ b1、qrcode_create.php
. m1 F4 w9 H7 d6 I& n2 g! dps:生成普通二维码- ~0 w  `! C% G: i6 {
  1. 4 M5 C, N# J+ d3 r! U1 M* k& T7 J
  2. include_once "./qrcode/phpqrcode.php";/**: F, ~8 z+ A( K* n
  3. - [( y) X( q. j
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径  |+ L+ x# v. k" s* d
  5. # z, _  e8 B1 p2 L: f
  6. * 在浏览器上直接生成一个二维码(内容为abc)
    9 @: j* d) P9 x3 N
  7. 4 ?8 s, a  C2 a( U! i* o8 t
  8. */QRcode::png("abc");' D9 l2 p, t5 n1 A& G% D9 a

  9. / k. W: g2 r! a4 E1 H! z
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
    3 S& s$ }- G: p+ ?0 M
  11. 5 K" V  x. y$ F
  12. * 生成文件到本地1 n9 N- r; F! ^4 [; d% G

  13. ! ~0 O# m6 [+ Z5 w" V
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)! l' T% a1 ~1 i9 n

  15. + g- C  ^" ^) z
  16. * PS:$saveandprint源码的p6参数做了修改2 f  H; C) y+ N, ]

  17. % w( g3 B( m. W* o, {. Y7 t' I; J
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);* l/ n% f$ H3 w  b2 p8 O) Y

  19.   N) J7 a9 e/ z0 ~% }2 b

  20. " z0 _8 G3 _1 r
复制代码

! Y# @/ f4 a/ f$ j2、qrcode_logo.php
: r3 ?0 u* l# t, pps:生成带Logo的二维码
  1. ) \. [- N& w6 v& q
  2. /**
    ; t' H$ y4 ?8 o+ B

  3. 5 v2 z  P( a" F: R0 N( ~5 r$ V
  4. * Created by PhpStorm." q, E1 V2 g1 z5 G$ H3 M1 e4 b
  5. & q: G: J, z6 J/ F  l
  6. * User: user8 S. S& z8 @! q5 b9 z
  7. $ ]* G; Y. G2 s& t5 T2 m# c
  8. * Date: 2018/8/16% z+ Y% R' z) l% a0 P& y9 \- O

  9. & z6 b! b% e1 g" Y9 N& ^
  10. * Time: 10:43
    & a8 I, K* E# }

  11. - l  v9 }" z$ M0 ^) X$ a" y& d0 W( J
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";+ x1 _; C" s9 S, r

  13. 7 y  Z3 R4 g$ w- X  v/ o
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
    / q, f' m: r  v) [; k$ ^/ l6 H

  15. 3 b! G& s% r( h3 ^& k3 B
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是' l; f8 `8 r  Q7 `* k
  17. / N% [) u4 Q0 V# K
  18. $margin = 2;//边距
    + z, c' ]1 f0 J- r$ K
  19. * F9 ~/ M  l8 L8 ]* ~
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
    9 S& U% N+ h( L. G+ ~, b* g
  21. 1 {! N& E- J1 p4 W, t0 _0 Z' w' ^0 `$ o
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   . [* C9 i; ^, N
  23. 4 m8 |/ Y2 ^- n
  24. $QR = $picPathAndName; //已经生成的原始二维码图+ [) J/ ]3 S3 W# }, f

  25. 7 k& }! A+ j4 t  T9 p1 ?
  26.     $Logo = './pic/logo.png';   " o/ X- v8 W0 J% h3 y' E5 d
  27. - G+ R8 L& ]7 p" V) `" x) i5 z
  28.     $Logo_re = './pic/test_logo.png';   
    4 a0 \7 c9 x/ l' M
  29. 0 a7 o. X5 p* n6 o: i
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   
    1 a; t7 A, u0 \5 D* Q

  31. 6 [" n# p: ~4 W8 ]: u2 k3 K- V/ P
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   
    0 n% W, u3 K! x- L1 L* A
  33. 1 x! \$ m8 W. b+ @
  34.     $QR_width = imagesx($QR); //二维码图片宽度
    3 J- |5 [, J8 t+ E
  35. 1 ?' ]9 N6 V! }. S9 M* x' X
  36.     $QR_height = imagesy($QR); //二维码图片高度& L8 K  t1 @7 }$ K2 s; Z$ m0 V

  37. 5 W9 t( ?) O& _, p, E$ U
  38.     $logo_width = imagesx($Logo); //logo图片宽度
    7 w- F  @! A' u: Q
  39. , f- ^: w/ w- j1 n6 a2 r. {) C& g9 w( `
  40.     $logo_height = imagesy($Logo); //logo图片高度
    8 z5 g# e# f% t6 R
  41. ) Q4 a6 F, J: Y* Z
  42.     $logo_qr_width = $QR_width / 5;   
    , L, w$ d3 d: O/ w

  43. . I$ f6 x- s- m
  44.     $scale = $logo_width / $logo_qr_width;   
    3 F9 y$ [7 T6 D. I- G6 Y2 N
  45. 5 d+ `$ J# H% n/ C
  46.     $logo_qr_height = $logo_height / $scale;   2 j  w: ~: d  E- }/ s6 u: H/ ?: l

  47. - v) v5 a: ^: X
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;
    % O6 ]( @9 r  H3 J& J3 w
  49. : F  J1 j3 h$ t0 z9 r
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   
    $ n2 d& a% z3 N  ?( }

  51. * K/ z8 ~8 l- G% @; k0 S$ w
  52.     //输出图片. n8 c& _0 w' z
  53. ; S* F: m: t9 @" {
  54.     imagepng($QR, $Logo_re);
    . q7 v. T7 q; r% I3 h/ I

  55. + W7 {  X8 G- W! i2 ]# N+ x
  56. }! H1 D) i$ Q( p- a1 h3 F
  57. # }  @" P* O) h- Z8 ]7 W
  58. + H8 q/ z! j. Q8 ]$ W+ p
复制代码
3、qrcode_vcard.php (生成电子签名)9 [6 x8 Y# E  r/ v+ `

1 o& q. x% k8 D$ EvCard格式:https://zh.wikipedia.org/wiki/VCard
9 }0 U  K3 P0 `+ N" h# n6 M) w5 x' K; i9 }* Q$ k6 o
  1. : |6 [! }" S2 h) l
  2. * Created by PhpStorm.
    . c4 F+ c& ~9 [' D

  3. 5 ]1 _" b% N4 s( J3 k- J
  4. * User: user
    + j2 A3 L% x0 P& H3 w

  5. 3 c+ W+ {6 Y$ B( j5 o
  6. * Date: 2018/8/15
    6 H$ H7 p$ L1 _9 `$ r! f+ r

  7. 1 J. J7 H3 N5 ~# c5 c- ^/ ~
  8. * Time: 23:00
    % d$ D8 K8 J/ d) S
  9. . H# D' o( y$ ~' w' b- ~! g0 q- T6 Y
  10. */require_once "./qrcode/phpqrcode.php";/**
    9 l* i8 v- L7 Y$ U" G3 [

  11. * ]/ o7 l/ v( s9 u
  12. * 生成电子签名
    ) D! n4 W" \9 N& n' |- q( e

  13. 1 V( d* W0 x4 J6 n4 H$ b' t8 ~+ M# E
  14. * PS;使用微信扫描二维码
    . p% Q' v  ?7 u) u+ N

  15. . j/ _5 I" z( h( B
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志; T4 P8 \- }1 g+ H8 E5 r+ s: t' |4 l
  17. 1 O' G& n& o3 t
  18. $content .= 'VERSION:2.1' . "\n";//当前版本9 S' j/ w* N' A. Y+ p$ ]
  19. ' I% \7 i) D$ s& p
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名/ C5 {% E4 h- @/ d: y

  21. 1 M/ a1 Z& [. u! a  q9 ]
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
    2 x$ S8 W$ o3 U/ W8 A

  23. 9 t& [4 u7 R+ @! ?; _5 ~: n
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位: t+ D- Q: D0 t  J9 W: i4 P

  25. , `, X" Y  f! z- ?4 \( l
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话2 P. h& d2 X# q) _

  27. + s7 t* r  o) g5 I7 D$ z
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
    6 w, C# G# g2 H

  29. 6 x1 R( E) b: R# \" j: J2 Y  K: w) L5 \
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
      ?; e. \: n7 B7 K1 r( Y# f
  31. $ C6 d& P' n" L
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话* b* D- `& F3 L$ A
  33. % b" J& d0 _/ y$ U$ D  h
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
    ; U, X4 O- ?: Y& E

  35. 0 c# H) k) L) e& [' K
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页+ D; M: C0 [2 j5 Q# `- J$ g& n; z; V
  37. ' Z2 `. Z: O# _
  38. $content .= 'END:VCARD' . "\n";//结束标志2 Z2 f1 J9 e7 ?* {/ q8 u
  39. 0 V: L. k- J  Q3 \
  40. QRcode::png($content);& D# n! \5 L8 o6 D" ^& K) d
  41. ; \# N% ~- D/ J9 u4 M1 y9 X
  42. 6 y, z+ K( Y4 O( T4 S2 r: V
复制代码

9 q" Y+ D$ S6 e6 C) W; K相关文章推荐:
% a9 B$ V" b0 S. W) J1.PHP生成微信二维码实例
/ J+ n  u8 I( H2 X$ S2.php网址转换生成二维码
* ], x! G+ i( \2 K相关视频推荐:  w* U  s: n; c9 n% g1 ?6 z8 `3 B3 G
1.独孤九贱(4)_PHP视频教程6 o$ f3 m. c/ e( a: r
二、JQUERY生成QR CODE
4 n% ^6 G9 d2 }0 l# ]2 p% B6 e: [源码地址:https://github.com/jeromeetienne/jquery-qrcode* \; @( P0 s9 x, ^5 K  _3 n

' s1 P7 T! V# S8 K" D" P6 E' g! yjquery_create.php
# H5 `* ]5 S/ z% ]3 V  F7 @7 h' F% e
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码

/ Z, \8 a. f8 Z) \8 V% x三、PHP识别二维码
, l4 @9 _) O% j" c# h& s0 |, e1、方法一
- Z. i; i. r6 i环境需求,安装如下扩展% t% Q( P+ c3 T0 h; e" _. d
- ImageMagick, ^% h' M" W6 r9 U) F0 j0 p
- zbar
" {5 Q! O, x6 t# u, U2 y: c* h% {7 o5 P- php-zbarcode
& W  p. Z# C8 P, ^8 A' u$ e7 e3 g; ]" z+ [2 Y9 J& U
2、方法二
3 A2 @6 G' j0 m1 OPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以, Z- z( c4 Y  D' \7 _
qrReader类:https://github.com/baagee/php_QrReader
$ s1 Y' q7 e+ ^/ ]5 q1 v  H4 k2 O3 y5 X; \. }; ~
  1. * }$ L- [! h) X5 |+ R9 |
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径4 U$ N0 Z3 R6 v& W: \9 L
  3. 6 J. ?4 K* \, v( i, Y
  4. $text = $qrcode->text(); //返回识别后的文本
      V& T9 m6 z9 M' n- h

  5. . d; d' D5 H4 y$ m# w
  6. echo $text;
    5 G- w3 M, N' W8 G( o

  7. 8 g  b5 c" }" B, a: @  I3 t

  8. 1 I2 Z) v7 V. F( J: _2 i
复制代码

0 X. Y  A# g. X5 A- Z$ A: Y. p链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7: B% A. [% F2 g# f* Q5 g0 z; v
5 N1 T2 ?! ^2 i; R, D+ q  r

( D$ Q% {7 y0 S; V3 T, I/ h, F* V- {0 a7 c6 [
: S; R9 |8 H% s9 I, D4 q  H1 R
7 B7 C, b- ^% Q2 p" L! q1 I
, A+ l) z& U" `" D- B2 F0 E$ R% x
: n, J/ X+ i. X- Y, H& E

& F6 j8 O, t0 j: A+ g. [
  C" x6 y' {1 `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-24 07:03 , Processed in 0.061929 second(s), 24 queries .

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