SoFunction
Updated on 2025-04-10

vue+uniapp implements the generation of QR code

1.First follow the dependency vue

npm install --save qrcode

2. Introduce on the page you need to use

import QRCode from 'qrcode';

3. Use

 const codeDetail = (item) => {
    //This is the data to be generated, mine is a string of numbers    ().then((img) => {
    (img);
    //This img is the image path, and it can be displayed by assigning it to the img tag.    });
  };

1. Create a new js folder and put the following code in it. I put the code at the end. The js file name is

2. References on the page used

import UQrocode from "../../pages/";

3. You need to have a canvas before use

 <canvas canvas- style="width: 30px; height: 30px"></canvas>

4. Use

    ({
//canvasId should be the same as the id of the canvas above.        canvasId:'qrcode',
        componentInstance:this,
        text:'What you want to generate',
        size:30//size,        margin:0
      })
  },

Code

The following is the js code

// 
//---------------------------------------------------------------------
// github /Sansnn/uQRCode
//---------------------------------------------------------------------
let uQRCode = {};
(function() {
	//---------------------------------------------------------------------
	// QRCode for JavaScript
	//
	// Copyright (c) 2009 Kazuhiko Arase
	//
	// URL: /
	//
	// Licensed under the MIT license:
	//   /licenses/
	//
	// The word "QR Code" is registered trademark of 
	// DENSO WAVE INCORPORATED
	//   /qrcode/
	//
	//---------------------------------------------------------------------
	//---------------------------------------------------------------------
	// QR8bitByte
	//---------------------------------------------------------------------
	function QR8bitByte(data) {
		 = QRMode.MODE_8BIT_BYTE;
		 = data;
	}
	 = {
		getLength: function(buffer) {
			return ;
		},
		write: function(buffer) {
			for (var i = 0; i &lt; ; i++) {
				// not JIS ...
				((i), 8);
			}
		}
	};
	//---------------------------------------------------------------------
	// QRCode
	//---------------------------------------------------------------------
	function QRCode(typeNumber, errorCorrectLevel) {
		 = typeNumber;
		 = errorCorrectLevel;
		 = null;
		 = 0;
		 = null;
		 = new Array();
	}
	 = {
		addData: function(data) {
			var newData = new QR8bitByte(data);
			(newData);
			 = null;
		},
		isDark: function(row, col) {
			if (row &lt; 0 ||  &lt;= row || col &lt; 0 ||  &lt;= col) {
				throw new Error(row + "," + col);
			}
			return [row][col];
		},
		getModuleCount: function() {
			return ;
		},
		make: function() {
			// Calculate automatically typeNumber if provided is &lt; 1
			if ( &lt; 1) {
				var typeNumber = 1;
				for (typeNumber = 1; typeNumber &lt; 40; typeNumber++) {
					var rsBlocks = (typeNumber, );
					var buffer = new QRBitBuffer();
					var totalDataCount = 0;
					for (var i = 0; i &lt; ; i++) {
						totalDataCount += rsBlocks[i].dataCount;
					}
					for (var i = 0; i &lt; ; i++) {
						var data = [i];
						(, 4);
						((), (, typeNumber));
						(buffer);
					}
					if (() &lt;= totalDataCount * 8)
						break;
				}
				 = typeNumber;
			}
			(false, ());
		},
		makeImpl: function(test, maskPattern) {
			 =  * 4 + 17;
			 = new Array();
			for (var row = 0; row &lt; ; row++) {
				[row] = new Array();
				for (var col = 0; col &lt; ; col++) {
					[row][col] = null; //(col + row) % 3;
				}
			}
			(0, 0);
			( - 7, 0);
			(0,  - 7);
			();
			();
			(test, maskPattern);
			if ( &gt;= 7) {
				(test);
			}
			if ( == null) {
				 = (, , );
			}
			(, maskPattern);
		},
		setupPositionProbePattern: function(row, col) {
			for (var r = -1; r &lt;= 7; r++) {
				if (row + r &lt;= -1 ||  &lt;= row + r) continue;
				for (var c = -1; c &lt;= 7; c++) {
					if (col + c &lt;= -1 ||  &lt;= col + c) continue;
					if ((0 &lt;= r &amp;&amp; r &lt;= 6 &amp;&amp; (c == 0 || c == 6)) ||
						(0 &lt;= c &amp;&amp; c &lt;= 6 &amp;&amp; (r == 0 || r == 6)) ||
						(2 &lt;= r &amp;&amp; r &lt;= 4 &amp;&amp; 2 &lt;= c &amp;&amp; c &lt;= 4)) {
						[row + r][col + c] = true;
					} else {
						[row + r][col + c] = false;
					}
				}
			}
		},
		getBestMaskPattern: function() {
			var minLostPoint = 0;
			var pattern = 0;
			for (var i = 0; i &lt; 8; i++) {
				(true, i);
				var lostPoint = (this);
				if (i == 0 || minLostPoint &gt; lostPoint) {
					minLostPoint = lostPoint;
					pattern = i;
				}
			}
			return pattern;
		},
		createMovieClip: function(target_mc, instance_name, depth) {
			var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);
			var cs = 1;
			();
			for (var row = 0; row &lt; ; row++) {
				var y = row * cs;
				for (var col = 0; col &lt; [row].length; col++) {
					var x = col * cs;
					var dark = [row][col];
					if (dark) {
						qr_mc.beginFill(0, 100);
						qr_mc.moveTo(x, y);
						qr_mc.lineTo(x + cs, y);
						qr_mc.lineTo(x + cs, y + cs);
						qr_mc.lineTo(x, y + cs);
						qr_mc.endFill();
					}
				}
			}
			return qr_mc;
		},
		setupTimingPattern: function() {
			for (var r = 8; r &lt;  - 8; r++) {
				if ([r][6] != null) {
					continue;
				}
				[r][6] = (r % 2 == 0);
			}
			for (var c = 8; c &lt;  - 8; c++) {
				if ([6][c] != null) {
					continue;
				}
				[6][c] = (c % 2 == 0);
			}
		},
		setupPositionAdjustPattern: function() {
			var pos = ();
			for (var i = 0; i &lt; ; i++) {
				for (var j = 0; j &lt; ; j++) {
					var row = pos[i];
					var col = pos[j];
					if ([row][col] != null) {
						continue;
					}
					for (var r = -2; r &lt;= 2; r++) {
						for (var c = -2; c &lt;= 2; c++) {
							if (r == -2 || r == 2 || c == -2 || c == 2 ||
								(r == 0 &amp;&amp; c == 0)) {
								[row + r][col + c] = true;
							} else {
								[row + r][col + c] = false;
							}
						}
					}
				}
			}
		},
		setupTypeNumber: function(test) {
			var bits = ();
			for (var i = 0; i &lt; 18; i++) {
				var mod = (!test &amp;&amp; ((bits &gt;&gt; i) &amp; 1) == 1);
				[(i / 3)][i % 3 +  - 8 - 3] = mod;
			}
			for (var i = 0; i &lt; 18; i++) {
				var mod = (!test &amp;&amp; ((bits &gt;&gt; i) &amp; 1) == 1);
				[i % 3 +  - 8 - 3][(i / 3)] = mod;
			}
		},
		setupTypeInfo: function(test, maskPattern) {
			var data = ( &lt;&lt; 3) | maskPattern;
			var bits = (data);
			// vertical		
			for (var i = 0; i &lt; 15; i++) {
				var mod = (!test &amp;&amp; ((bits &gt;&gt; i) &amp; 1) == 1);
				if (i &lt; 6) {
					[i][8] = mod;
				} else if (i &lt; 8) {
					[i + 1][8] = mod;
				} else {
					[ - 15 + i][8] = mod;
				}
			}
			// horizontal
			for (var i = 0; i &lt; 15; i++) {
				var mod = (!test &amp;&amp; ((bits &gt;&gt; i) &amp; 1) == 1);
				if (i &lt; 8) {
					[8][ - i - 1] = mod;
				} else if (i &lt; 9) {
					[8][15 - i - 1 + 1] = mod;
				} else {
					[8][15 - i - 1] = mod;
				}
			}
			// fixed module
			[ - 8][8] = (!test);
		},
		mapData: function(data, maskPattern) {
			var inc = -1;
			var row =  - 1;
			var bitIndex = 7;
			var byteIndex = 0;
			for (var col =  - 1; col &gt; 0; col -= 2) {
				if (col == 6) col--;
				while (true) {
					for (var c = 0; c &lt; 2; c++) {
						if ([row][col - c] == null) {
							var dark = false;
							if (byteIndex &lt; ) {
								dark = (((data[byteIndex] &gt;&gt;&gt; bitIndex) &amp; 1) == 1);
							}
							var mask = (maskPattern, row, col - c);
							if (mask) {
								dark = !dark;
							}
							[row][col - c] = dark;
							bitIndex--;
							if (bitIndex == -1) {
								byteIndex++;
								bitIndex = 7;
							}
						}
					}
					row += inc;
					if (row &lt; 0 ||  &lt;= row) {
						row -= inc;
						inc = -inc;
						break;
					}
				}
			}
		}
	};
	QRCode.PAD0 = 0xEC;
	QRCode.PAD1 = 0x11;
	 = function(typeNumber, errorCorrectLevel, dataList) {
		var rsBlocks = (typeNumber, errorCorrectLevel);
		var buffer = new QRBitBuffer();
		for (var i = 0; i &lt; ; i++) {
			var data = dataList[i];
			(, 4);
			((), (, typeNumber));
			(buffer);
		}
		// calc num max data.
		var totalDataCount = 0;
		for (var i = 0; i &lt; ; i++) {
			totalDataCount += rsBlocks[i].dataCount;
		}
		if (() &gt; totalDataCount * 8) {
			throw new Error("code length overflow. (" +
				() +
				"&gt;" +
				totalDataCount * 8 +
				")");
		}
		// end code
		if (() + 4 &lt;= totalDataCount * 8) {
			(0, 4);
		}
		// padding
		while (() % 8 != 0) {
			(false);
		}
		// padding
		while (true) {
			if (() &gt;= totalDataCount * 8) {
				break;
			}
			(QRCode.PAD0, 8);
			if (() &gt;= totalDataCount * 8) {
				break;
			}
			(QRCode.PAD1, 8);
		}
		return (buffer, rsBlocks);
	}
	 = function(buffer, rsBlocks) {
		var offset = 0;
		var maxDcCount = 0;
		var maxEcCount = 0;
		var dcdata = new Array();
		var ecdata = new Array();
		for (var r = 0; r &lt; ; r++) {
			var dcCount = rsBlocks[r].dataCount;
			var ecCount = rsBlocks[r].totalCount - dcCount;
			maxDcCount = (maxDcCount, dcCount);
			maxEcCount = (maxEcCount, ecCount);
			dcdata[r] = new Array(dcCount);
			for (var i = 0; i &lt; dcdata[r].length; i++) {
				dcdata[r][i] = 0xff &amp; [i + offset];
			}
			offset += dcCount;
			var rsPoly = (ecCount);
			var rawPoly = new QRPolynomial(dcdata[r], () - 1);
			var modPoly = (rsPoly);
			ecdata[r] = new Array(() - 1);
			for (var i = 0; i &lt; ecdata[r].length; i++) {
				var modIndex = i + () - ecdata[r].length;
				ecdata[r][i] = (modIndex &gt;= 0) ? (modIndex) : 0;
			}
		}
		var totalCodeCount = 0;
		for (var i = 0; i &lt; ; i++) {
			totalCodeCount += rsBlocks[i].totalCount;
		}
		var data = new Array(totalCodeCount);
		var index = 0;
		for (var i = 0; i &lt; maxDcCount; i++) {
			for (var r = 0; r &lt; ; r++) {
				if (i &lt; dcdata[r].length) {
					data[index++] = dcdata[r][i];
				}
			}
		}
		for (var i = 0; i &lt; maxEcCount; i++) {
			for (var r = 0; r &lt; ; r++) {
				if (i &lt; ecdata[r].length) {
					data[index++] = ecdata[r][i];
				}
			}
		}
		return data;
	}
	//---------------------------------------------------------------------
	// QRMode
	//---------------------------------------------------------------------
	var QRMode = {
		MODE_NUMBER: 1 &lt;&lt; 0,
		MODE_ALPHA_NUM: 1 &lt;&lt; 1,
		MODE_8BIT_BYTE: 1 &lt;&lt; 2,
		MODE_KANJI: 1 &lt;&lt; 3
	};
	//---------------------------------------------------------------------
	// QRErrorCorrectLevel
	//---------------------------------------------------------------------
	var QRErrorCorrectLevel = {
		L: 1,
		M: 0,
		Q: 3,
		H: 2
	};
	//---------------------------------------------------------------------
	// QRMaskPattern
	//---------------------------------------------------------------------
	var QRMaskPattern = {
		PATTERN000: 0,
		PATTERN001: 1,
		PATTERN010: 2,
		PATTERN011: 3,
		PATTERN100: 4,
		PATTERN101: 5,
		PATTERN110: 6,
		PATTERN111: 7
	};
	//---------------------------------------------------------------------
	// QRUtil
	//---------------------------------------------------------------------
	var QRUtil = {
		PATTERN_POSITION_TABLE: [
			[],
			[6, 18],
			[6, 22],
			[6, 26],
			[6, 30],
			[6, 34],
			[6, 22, 38],
			[6, 24, 42],
			[6, 26, 46],
			[6, 28, 50],
			[6, 30, 54],
			[6, 32, 58],
			[6, 34, 62],
			[6, 26, 46, 66],
			[6, 26, 48, 70],
			[6, 26, 50, 74],
			[6, 30, 54, 78],
			[6, 30, 56, 82],
			[6, 30, 58, 86],
			[6, 34, 62, 90],
			[6, 28, 50, 72, 94],
			[6, 26, 50, 74, 98],
			[6, 30, 54, 78, 102],
			[6, 28, 54, 80, 106],
			[6, 32, 58, 84, 110],
			[6, 30, 58, 86, 114],
			[6, 34, 62, 90, 118],
			[6, 26, 50, 74, 98, 122],
			[6, 30, 54, 78, 102, 126],
			[6, 26, 52, 78, 104, 130],
			[6, 30, 56, 82, 108, 134],
			[6, 34, 60, 86, 112, 138],
			[6, 30, 58, 86, 114, 142],
			[6, 34, 62, 90, 118, 146],
			[6, 30, 54, 78, 102, 126, 150],
			[6, 24, 50, 76, 102, 128, 154],
			[6, 28, 54, 80, 106, 132, 158],
			[6, 32, 58, 84, 110, 136, 162],
			[6, 26, 54, 82, 110, 138, 166],
			[6, 30, 58, 86, 114, 142, 170]
		],
		G15: (1 &lt;&lt; 10) | (1 &lt;&lt; 8) | (1 &lt;&lt; 5) | (1 &lt;&lt; 4) | (1 &lt;&lt; 2) | (1 &lt;&lt; 1) | (1 &lt;&lt; 0),
		G18: (1 &lt;&lt; 12) | (1 &lt;&lt; 11) | (1 &lt;&lt; 10) | (1 &lt;&lt; 9) | (1 &lt;&lt; 8) | (1 &lt;&lt; 5) | (1 &lt;&lt; 2) | (1 &lt;&lt; 0),
		G15_MASK: (1 &lt;&lt; 14) | (1 &lt;&lt; 12) | (1 &lt;&lt; 10) | (1 &lt;&lt; 4) | (1 &lt;&lt; 1),
		getBCHTypeInfo: function(data) {
			var d = data &lt;&lt; 10;
			while ((d) - (QRUtil.G15) &gt;= 0) {
				d ^= (QRUtil.G15 &lt;&lt; ((d) - (QRUtil.G15)));
			}
			return ((data &lt;&lt; 10) | d) ^ QRUtil.G15_MASK;
		},
		getBCHTypeNumber: function(data) {
			var d = data &lt;&lt; 12;
			while ((d) - (QRUtil.G18) &gt;= 0) {
				d ^= (QRUtil.G18 &lt;&lt; ((d) - (QRUtil.G18)));
			}
			return (data &lt;&lt; 12) | d;
		},
		getBCHDigit: function(data) {
			var digit = 0;
			while (data != 0) {
				digit++;
				data &gt;&gt;&gt;= 1;
			}
			return digit;
		},
		getPatternPosition: function(typeNumber) {
			return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
		},
		getMask: function(maskPattern, i, j) {
			switch (maskPattern) {
				case QRMaskPattern.PATTERN000:
					return (i + j) % 2 == 0;
				case QRMaskPattern.PATTERN001:
					return i % 2 == 0;
				case QRMaskPattern.PATTERN010:
					return j % 3 == 0;
				case QRMaskPattern.PATTERN011:
					return (i + j) % 3 == 0;
				case QRMaskPattern.PATTERN100:
					return ((i / 2) + (j / 3)) % 2 == 0;
				case QRMaskPattern.PATTERN101:
					return (i * j) % 2 + (i * j) % 3 == 0;
				case QRMaskPattern.PATTERN110:
					return ((i * j) % 2 + (i * j) % 3) % 2 == 0;
				case QRMaskPattern.PATTERN111:
					return ((i * j) % 3 + (i + j) % 2) % 2 == 0;
				default:
					throw new Error("bad maskPattern:" + maskPattern);
			}
		},
		getErrorCorrectPolynomial: function(errorCorrectLength) {
			var a = new QRPolynomial([1], 0);
			for (var i = 0; i &lt; errorCorrectLength; i++) {
				a = (new QRPolynomial([1, (i)], 0));
			}
			return a;
		},
		getLengthInBits: function(mode, type) {
			if (1 &lt;= type &amp;&amp; type &lt; 10) {
				// 1 - 9
				switch (mode) {
					case QRMode.MODE_NUMBER:
						return 10;
					case QRMode.MODE_ALPHA_NUM:
						return 9;
					case QRMode.MODE_8BIT_BYTE:
						return 8;
					case QRMode.MODE_KANJI:
						return 8;
					default:
						throw new Error("mode:" + mode);
				}
			} else if (type &lt; 27) {
				// 10 - 26
				switch (mode) {
					case QRMode.MODE_NUMBER:
						return 12;
					case QRMode.MODE_ALPHA_NUM:
						return 11;
					case QRMode.MODE_8BIT_BYTE:
						return 16;
					case QRMode.MODE_KANJI:
						return 10;
					default:
						throw new Error("mode:" + mode);
				}
			} else if (type &lt; 41) {
				// 27 - 40
				switch (mode) {
					case QRMode.MODE_NUMBER:
						return 14;
					case QRMode.MODE_ALPHA_NUM:
						return 13;
					case QRMode.MODE_8BIT_BYTE:
						return 16;
					case QRMode.MODE_KANJI:
						return 12;
					default:
						throw new Error("mode:" + mode);
				}
			} else {
				throw new Error("type:" + type);
			}
		},
		getLostPoint: function(qrCode) {
			var moduleCount = ();
			var lostPoint = 0;
			// LEVEL1
			for (var row = 0; row &lt; moduleCount; row++) {
				for (var col = 0; col &lt; moduleCount; col++) {
					var sameCount = 0;
					var dark = (row, col);
					for (var r = -1; r &lt;= 1; r++) {
						if (row + r &lt; 0 || moduleCount &lt;= row + r) {
							continue;
						}
						for (var c = -1; c &lt;= 1; c++) {
							if (col + c &lt; 0 || moduleCount &lt;= col + c) {
								continue;
							}
							if (r == 0 &amp;&amp; c == 0) {
								continue;
							}
							if (dark == (row + r, col + c)) {
								sameCount++;
							}
						}
					}
					if (sameCount &gt; 5) {
						lostPoint += (3 + sameCount - 5);
					}
				}
			}
			// LEVEL2
			for (var row = 0; row &lt; moduleCount - 1; row++) {
				for (var col = 0; col &lt; moduleCount - 1; col++) {
					var count = 0;
					if ((row, col)) count++;
					if ((row + 1, col)) count++;
					if ((row, col + 1)) count++;
					if ((row + 1, col + 1)) count++;
					if (count == 0 || count == 4) {
						lostPoint += 3;
					}
				}
			}
			// LEVEL3
			for (var row = 0; row &lt; moduleCount; row++) {
				for (var col = 0; col &lt; moduleCount - 6; col++) {
					if ((row, col) &amp;&amp;
						!(row, col + 1) &amp;&amp;
						(row, col + 2) &amp;&amp;
						(row, col + 3) &amp;&amp;
						(row, col + 4) &amp;&amp;
						!(row, col + 5) &amp;&amp;
						(row, col + 6)) {
						lostPoint += 40;
					}
				}
			}
			for (var col = 0; col &lt; moduleCount; col++) {
				for (var row = 0; row &lt; moduleCount - 6; row++) {
					if ((row, col) &amp;&amp;
						!(row + 1, col) &amp;&amp;
						(row + 2, col) &amp;&amp;
						(row + 3, col) &amp;&amp;
						(row + 4, col) &amp;&amp;
						!(row + 5, col) &amp;&amp;
						(row + 6, col)) {
						lostPoint += 40;
					}
				}
			}
			// LEVEL4
			var darkCount = 0;
			for (var col = 0; col &lt; moduleCount; col++) {
				for (var row = 0; row &lt; moduleCount; row++) {
					if ((row, col)) {
						darkCount++;
					}
				}
			}
			var ratio = (100 * darkCount / moduleCount / moduleCount - 50) / 5;
			lostPoint += ratio * 10;
			return lostPoint;
		}
	};
	//---------------------------------------------------------------------
	// QRMath
	//---------------------------------------------------------------------
	var QRMath = {
		glog: function(n) {
			if (n &lt; 1) {
				throw new Error("glog(" + n + ")");
			}
			return QRMath.LOG_TABLE[n];
		},
		gexp: function(n) {
			while (n &lt; 0) {
				n += 255;
			}
			while (n &gt;= 256) {
				n -= 255;
			}
			return QRMath.EXP_TABLE[n];
		},
		EXP_TABLE: new Array(256),
		LOG_TABLE: new Array(256)
	};
	for (var i = 0; i &lt; 8; i++) {
		QRMath.EXP_TABLE[i] = 1 &lt;&lt; i;
	}
	for (var i = 8; i &lt; 256; i++) {
		QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^
			QRMath.EXP_TABLE[i - 5] ^
			QRMath.EXP_TABLE[i - 6] ^
			QRMath.EXP_TABLE[i - 8];
	}
	for (var i = 0; i &lt; 255; i++) {
		QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
	}
	//---------------------------------------------------------------------
	// QRPolynomial
	//---------------------------------------------------------------------
	function QRPolynomial(num, shift) {
		if ( == undefined) {
			throw new Error( + "/" + shift);
		}
		var offset = 0;
		while (offset &lt;  &amp;&amp; num[offset] == 0) {
			offset++;
		}
		 = new Array( - offset + shift);
		for (var i = 0; i &lt;  - offset; i++) {
			[i] = num[i + offset];
		}
	}
	 = {
		get: function(index) {
			return [index];
		},
		getLength: function() {
			return ;
		},
		multiply: function(e) {
			var num = new Array(() + () - 1);
			for (var i = 0; i &lt; (); i++) {
				for (var j = 0; j &lt; (); j++) {
					num[i + j] ^= (((i)) + ((j)));
				}
			}
			return new QRPolynomial(num, 0);
		},
		mod: function(e) {
			if (() - () &lt; 0) {
				return this;
			}
			var ratio = ((0)) - ((0));
			var num = new Array(());
			for (var i = 0; i &lt; (); i++) {
				num[i] = (i);
			}
			for (var i = 0; i &lt; (); i++) {
				num[i] ^= (((i)) + ratio);
			}
			// recursive call
			return new QRPolynomial(num, 0).mod(e);
		}
	};
	//---------------------------------------------------------------------
	// QRRSBlock
	//---------------------------------------------------------------------
	function QRRSBlock(totalCount, dataCount) {
		 = totalCount;
		 = dataCount;
	}
	QRRSBlock.RS_BLOCK_TABLE = [
		// L
		// M
		// Q
		// H
		// 1
		[1, 26, 19],
		[1, 26, 16],
		[1, 26, 13],
		[1, 26, 9],
		// 2
		[1, 44, 34],
		[1, 44, 28],
		[1, 44, 22],
		[1, 44, 16],
		// 3
		[1, 70, 55],
		[1, 70, 44],
		[2, 35, 17],
		[2, 35, 13],
		// 4		
		[1, 100, 80],
		[2, 50, 32],
		[2, 50, 24],
		[4, 25, 9],
		// 5
		[1, 134, 108],
		[2, 67, 43],
		[2, 33, 15, 2, 34, 16],
		[2, 33, 11, 2, 34, 12],
		// 6
		[2, 86, 68],
		[4, 43, 27],
		[4, 43, 19],
		[4, 43, 15],
		// 7		
		[2, 98, 78],
		[4, 49, 31],
		[2, 32, 14, 4, 33, 15],
		[4, 39, 13, 1, 40, 14],
		// 8
		[2, 121, 97],
		[2, 60, 38, 2, 61, 39],
		[4, 40, 18, 2, 41, 19],
		[4, 40, 14, 2, 41, 15],
		// 9
		[2, 146, 116],
		[3, 58, 36, 2, 59, 37],
		[4, 36, 16, 4, 37, 17],
		[4, 36, 12, 4, 37, 13],
		// 10		
		[2, 86, 68, 2, 87, 69],
		[4, 69, 43, 1, 70, 44],
		[6, 43, 19, 2, 44, 20],
		[6, 43, 15, 2, 44, 16],
		// 11
		[4, 101, 81],
		[1, 80, 50, 4, 81, 51],
		[4, 50, 22, 4, 51, 23],
		[3, 36, 12, 8, 37, 13],
		// 12
		[2, 116, 92, 2, 117, 93],
		[6, 58, 36, 2, 59, 37],
		[4, 46, 20, 6, 47, 21],
		[7, 42, 14, 4, 43, 15],
		// 13
		[4, 133, 107],
		[8, 59, 37, 1, 60, 38],
		[8, 44, 20, 4, 45, 21],
		[12, 33, 11, 4, 34, 12],
		// 14
		[3, 145, 115, 1, 146, 116],
		[4, 64, 40, 5, 65, 41],
		[11, 36, 16, 5, 37, 17],
		[11, 36, 12, 5, 37, 13],
		// 15
		[5, 109, 87, 1, 110, 88],
		[5, 65, 41, 5, 66, 42],
		[5, 54, 24, 7, 55, 25],
		[11, 36, 12],
		// 16
		[5, 122, 98, 1, 123, 99],
		[7, 73, 45, 3, 74, 46],
		[15, 43, 19, 2, 44, 20],
		[3, 45, 15, 13, 46, 16],
		// 17
		[1, 135, 107, 5, 136, 108],
		[10, 74, 46, 1, 75, 47],
		[1, 50, 22, 15, 51, 23],
		[2, 42, 14, 17, 43, 15],
		// 18
		[5, 150, 120, 1, 151, 121],
		[9, 69, 43, 4, 70, 44],
		[17, 50, 22, 1, 51, 23],
		[2, 42, 14, 19, 43, 15],
		// 19
		[3, 141, 113, 4, 142, 114],
		[3, 70, 44, 11, 71, 45],
		[17, 47, 21, 4, 48, 22],
		[9, 39, 13, 16, 40, 14],
		// 20
		[3, 135, 107, 5, 136, 108],
		[3, 67, 41, 13, 68, 42],
		[15, 54, 24, 5, 55, 25],
		[15, 43, 15, 10, 44, 16],
		// 21
		[4, 144, 116, 4, 145, 117],
		[17, 68, 42],
		[17, 50, 22, 6, 51, 23],
		[19, 46, 16, 6, 47, 17],
		// 22
		[2, 139, 111, 7, 140, 112],
		[17, 74, 46],
		[7, 54, 24, 16, 55, 25],
		[34, 37, 13],
		// 23
		[4, 151, 121, 5, 152, 122],
		[4, 75, 47, 14, 76, 48],
		[11, 54, 24, 14, 55, 25],
		[16, 45, 15, 14, 46, 16],
		// 24
		[6, 147, 117, 4, 148, 118],
		[6, 73, 45, 14, 74, 46],
		[11, 54, 24, 16, 55, 25],
		[30, 46, 16, 2, 47, 17],
		// 25
		[8, 132, 106, 4, 133, 107],
		[8, 75, 47, 13, 76, 48],
		[7, 54, 24, 22, 55, 25],
		[22, 45, 15, 13, 46, 16],
		// 26
		[10, 142, 114, 2, 143, 115],
		[19, 74, 46, 4, 75, 47],
		[28, 50, 22, 6, 51, 23],
		[33, 46, 16, 4, 47, 17],
		// 27
		[8, 152, 122, 4, 153, 123],
		[22, 73, 45, 3, 74, 46],
		[8, 53, 23, 26, 54, 24],
		[12, 45, 15, 28, 46, 16],
		// 28
		[3, 147, 117, 10, 148, 118],
		[3, 73, 45, 23, 74, 46],
		[4, 54, 24, 31, 55, 25],
		[11, 45, 15, 31, 46, 16],
		// 29
		[7, 146, 116, 7, 147, 117],
		[21, 73, 45, 7, 74, 46],
		[1, 53, 23, 37, 54, 24],
		[19, 45, 15, 26, 46, 16],
		// 30
		[5, 145, 115, 10, 146, 116],
		[19, 75, 47, 10, 76, 48],
		[15, 54, 24, 25, 55, 25],
		[23, 45, 15, 25, 46, 16],
		// 31
		[13, 145, 115, 3, 146, 116],
		[2, 74, 46, 29, 75, 47],
		[42, 54, 24, 1, 55, 25],
		[23, 45, 15, 28, 46, 16],
		// 32
		[17, 145, 115],
		[10, 74, 46, 23, 75, 47],
		[10, 54, 24, 35, 55, 25],
		[19, 45, 15, 35, 46, 16],
		// 33
		[17, 145, 115, 1, 146, 116],
		[14, 74, 46, 21, 75, 47],
		[29, 54, 24, 19, 55, 25],
		[11, 45, 15, 46, 46, 16],
		// 34
		[13, 145, 115, 6, 146, 116],
		[14, 74, 46, 23, 75, 47],
		[44, 54, 24, 7, 55, 25],
		[59, 46, 16, 1, 47, 17],
		// 35
		[12, 151, 121, 7, 152, 122],
		[12, 75, 47, 26, 76, 48],
		[39, 54, 24, 14, 55, 25],
		[22, 45, 15, 41, 46, 16],
		// 36
		[6, 151, 121, 14, 152, 122],
		[6, 75, 47, 34, 76, 48],
		[46, 54, 24, 10, 55, 25],
		[2, 45, 15, 64, 46, 16],
		// 37
		[17, 152, 122, 4, 153, 123],
		[29, 74, 46, 14, 75, 47],
		[49, 54, 24, 10, 55, 25],
		[24, 45, 15, 46, 46, 16],
		// 38
		[4, 152, 122, 18, 153, 123],
		[13, 74, 46, 32, 75, 47],
		[48, 54, 24, 14, 55, 25],
		[42, 45, 15, 32, 46, 16],
		// 39
		[20, 147, 117, 4, 148, 118],
		[40, 75, 47, 7, 76, 48],
		[43, 54, 24, 22, 55, 25],
		[10, 45, 15, 67, 46, 16],
		// 40
		[19, 148, 118, 6, 149, 119],
		[18, 75, 47, 31, 76, 48],
		[34, 54, 24, 34, 55, 25],
		[20, 45, 15, 61, 46, 16]
	];
	 = function(typeNumber, errorCorrectLevel) {
		var rsBlock = (typeNumber, errorCorrectLevel);
		if (rsBlock == undefined) {
			throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
		}
		var length =  / 3;
		var list = new Array();
		for (var i = 0; i &lt; length; i++) {
			var count = rsBlock[i * 3 + 0];
			var totalCount = rsBlock[i * 3 + 1];
			var dataCount = rsBlock[i * 3 + 2];
			for (var j = 0; j &lt; count; j++) {
				(new QRRSBlock(totalCount, dataCount));
			}
		}
		return list;
	}
	 = function(typeNumber, errorCorrectLevel) {
		switch (errorCorrectLevel) {
			case :
				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
			case :
				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
			case :
				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
			case :
				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
			default:
				return undefined;
		}
	}
	//---------------------------------------------------------------------
	// QRBitBuffer
	//---------------------------------------------------------------------
	function QRBitBuffer() {
		 = new Array();
		 = 0;
	}
	 = {
		get: function(index) {
			var bufIndex = (index / 8);
			return (([bufIndex] &gt;&gt;&gt; (7 - index % 8)) &amp; 1) == 1;
		},
		put: function(num, length) {
			for (var i = 0; i &lt; length; i++) {
				(((num &gt;&gt;&gt; (length - i - 1)) &amp; 1) == 1);
			}
		},
		getLengthInBits: function() {
			return ;
		},
		putBit: function(bit) {
			var bufIndex = ( / 8);
			if ( &lt;= bufIndex) {
				(0);
			}
			if (bit) {
				[bufIndex] |= (0x80 &gt;&gt;&gt; ( % 8));
			}
			++;
		}
	};
	//---------------------------------------------------------------------
	// Support Chinese
	//---------------------------------------------------------------------
	function utf16To8(text) {
		var result = '';
		var c;
		for (var i = 0; i &lt; ; i++) {
			c = (i);
			if (c &gt;= 0x0001 &amp;&amp; c &lt;= 0x007F) {
				result += (i);
			} else if (c &gt; 0x07FF) {
				result += (0xE0 | c &gt;&gt; 12 &amp; 0x0F);
				result += (0x80 | c &gt;&gt; 6 &amp; 0x3F);
				result += (0x80 | c &gt;&gt; 0 &amp; 0x3F);
			} else {
				result += (0xC0 | c &gt;&gt; 6 &amp; 0x1F);
				result += (0x80 | c &gt;&gt; 0 &amp; 0x3F);
			}
		}
		return result;
	}
	uQRCode = {
		errorCorrectLevel: QRErrorCorrectLevel,
		defaults: {
			size: 354,
			margin: 0,
			backgroundColor: '#ffffff',
			foregroundColor: '#000000',
			fileType: 'png', // 'jpg', 'png'
			errorCorrectLevel: ,
			typeNumber: -1
		},
		make: function(options) {
			return new Promise((reslove, reject) =&gt; {
				var defaultOptions = {
					canvasId: ,
					componentInstance: ,
					text: ,
					size: ,
					margin: ,
					backgroundColor: ,
					foregroundColor: ,
					fileType: ,
					errorCorrectLevel: ,
					typeNumber: 
				};
				if (options) {
					for (var i in options) {
						defaultOptions[i] = options[i];
					}
				}
				options = defaultOptions;
				if (!) {
					('uQRCode: Please set canvasId!');
					return;
				}
				function createCanvas() {
					var qrcode = new QRCode(, );
					(utf16To8());
					();
					var ctx = (, );
					();
					(0, 0, , );
					var tileW = ( -  * 2) / ();
					var tileH = tileW;
					for (var row = 0; row &lt; (); row++) {
						for (var col = 0; col &lt; (); col++) {
							var style = (row, col) ?  : ;
							(style);
							var x = (col * tileW) + ;
							var y = (row * tileH) + ;
							var w = ((col + 1) * tileW) - (col * tileW);
							var h = ((row + 1) * tileW) - (row * tileW);
							(x, y, w, h);
						}
					}
					setTimeout(function() {
						(false, (function() {
							setTimeout(function() {
								({
									canvasId: ,
									fileType: ,
									width: ,
									height: ,
									destWidth: ,
									destHeight: ,
									success: function(res) {
										let resData; // Will be unified into base64 format										let tempFilePath = ; // H5 is base64, others are relative paths										// #ifdef H5
										resData = tempFilePath;
										 &amp;&amp; (resData);
										reslove(resData);
										// #endif
										// #ifdef APP-PLUS
										const path = (tempFilePath) // Absolute path										let fileReader = new ();
										(path);
										 = res =&gt; {
											resData = ;
											 &amp;&amp; (resData);
											reslove(resData);
										};
										// #endif
										// #ifdef MP-WEIXIN || MP-QQ || MP-TOUTIAO
										().readFile({
											filePath: tempFilePath,
											encoding: 'base64',
											success: res =&gt; {
												resData = 'data:image/png;base64,' + ;
												 &amp;&amp; (resData);
												reslove(resData);
											}
										})
										// #endif
										// #ifndef H5 || APP-PLUS || MP-WEIXIN || MP-QQ || MP-TOUTIAO
										if (plus) {
											const path = (tempFilePath) // Absolute path											let fileReader = new ();
											(path);
											 = res =&gt; {
												resData = ;
												 &amp;&amp; (resData);
												reslove(resData);
											};
										} else {
											({
												url: tempFilePath,
												method: 'GET',
												responseType: 'arraybuffer',
												success: res =&gt; {
													resData = `data:image/png;base64,${uni.arrayBufferToBase64()}`; // Convert arraybuffer to base64													 &amp;&amp; (resData);
													reslove(resData);
												}
											})
										}
										// #endif
									},
									fail: function(error) {
										 &amp;&amp; (error);
										reject(error);
									},
									complete: function(res) {
										 &amp;&amp; (res);
									}
								}, );
							},  + 100);
						})());
					}, 150);
				}
				createCanvas();
			});
		}
	}
})()
export default uQRCode

The above is the detailed content of vue+uniapp to generate QR codes. For more information about vue generating QR codes, please pay attention to my other related articles!