Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
U
uni-pdtravel
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
panyongping
uni-pdtravel
Commits
869ba920
Commit
869ba920
authored
Sep 15, 2023
by
潘永坪
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of
http://git.tbd.yanzuoguang.com/panyongping/uni-pdtravel
into develop
parents
bca175eb
40bd3c11
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
1679 additions
and
483 deletions
+1679
-483
weapp-qrcode.js
common/weapp-qrcode.js
+1580
-408
electronicTicket-副本.vue
pages/my/order/electronicTicket/electronicTicket-副本.vue
+32
-44
electronicTicket.vue
pages/my/order/electronicTicket/electronicTicket.vue
+67
-31
No files found.
common/weapp-qrcode.js
View file @
869ba920
// Core code comes from https://github.com/davidshimjs/qrcodejs
var
QRCode
;
(
function
()
{
/**
* Get the type by string length
*
* @private
* @param {String} sText
* @param {Number} nCorrectLevel
* @return {Number} type
/**
* qrcode
* @param typeNumber 1 to 40
* @param errorCorrectLevel 'L','M','Q','H'
*/
function
_getTypeNumber
(
sText
,
nCorrectLevel
)
{
var
nType
=
1
var
length
=
_getUTF8Length
(
sText
)
var
qrcode
=
function
(
typeNumber
,
errorCorrectLevel
)
{
for
(
var
i
=
0
,
len
=
QRCodeLimitLength
.
length
;
i
<=
len
;
i
++
)
{
var
nLimit
=
0
var
PAD0
=
0xEC
var
PAD1
=
0x11
switch
(
nCorrectLevel
)
{
case
QRErrorCorrectLevel
.
L
:
nLimit
=
QRCodeLimitLength
[
i
][
0
]
break
case
QRErrorCorrectLevel
.
M
:
nLimit
=
QRCodeLimitLength
[
i
][
1
]
var
_typeNumber
=
typeNumber
var
_errorCorrectLevel
=
QRErrorCorrectLevel
[
errorCorrectLevel
]
var
_modules
=
null
var
_moduleCount
=
0
var
_dataCache
=
null
var
_dataList
=
new
Array
()
var
_this
=
{}
var
makeImpl
=
function
(
test
,
maskPattern
)
{
_moduleCount
=
_typeNumber
*
4
+
17
_modules
=
function
(
moduleCount
)
{
var
modules
=
new
Array
(
moduleCount
)
for
(
var
row
=
0
;
row
<
moduleCount
;
row
+=
1
)
{
modules
[
row
]
=
new
Array
(
moduleCount
)
for
(
var
col
=
0
;
col
<
moduleCount
;
col
+=
1
)
{
modules
[
row
][
col
]
=
null
}
}
return
modules
}(
_moduleCount
)
setupPositionProbePattern
(
0
,
0
)
setupPositionProbePattern
(
_moduleCount
-
7
,
0
)
setupPositionProbePattern
(
0
,
_moduleCount
-
7
)
setupPositionAdjustPattern
()
setupTimingPattern
()
setupTypeInfo
(
test
,
maskPattern
)
if
(
_typeNumber
>=
7
)
{
setupTypeNumber
(
test
)
}
if
(
_dataCache
==
null
)
{
_dataCache
=
createData
(
_typeNumber
,
_errorCorrectLevel
,
_dataList
)
}
mapData
(
_dataCache
,
maskPattern
)
}
var
setupPositionProbePattern
=
function
(
row
,
col
)
{
for
(
var
r
=
-
1
;
r
<=
7
;
r
+=
1
)
{
if
(
row
+
r
<=
-
1
||
_moduleCount
<=
row
+
r
)
continue
for
(
var
c
=
-
1
;
c
<=
7
;
c
+=
1
)
{
if
(
col
+
c
<=
-
1
||
_moduleCount
<=
col
+
c
)
continue
if
(
(
0
<=
r
&&
r
<=
6
&&
(
c
==
0
||
c
==
6
)
)
||
(
0
<=
c
&&
c
<=
6
&&
(
r
==
0
||
r
==
6
)
)
||
(
2
<=
r
&&
r
<=
4
&&
2
<=
c
&&
c
<=
4
)
)
{
_modules
[
row
+
r
][
col
+
c
]
=
true
}
else
{
_modules
[
row
+
r
][
col
+
c
]
=
false
}
}
}
}
var
getBestMaskPattern
=
function
()
{
var
minLostPoint
=
0
var
pattern
=
0
for
(
var
i
=
0
;
i
<
8
;
i
+=
1
)
{
makeImpl
(
true
,
i
)
var
lostPoint
=
QRUtil
.
getLostPoint
(
_this
)
if
(
i
==
0
||
minLostPoint
>
lostPoint
)
{
minLostPoint
=
lostPoint
pattern
=
i
}
}
return
pattern
}
var
setupTimingPattern
=
function
()
{
for
(
var
r
=
8
;
r
<
_moduleCount
-
8
;
r
+=
1
)
{
if
(
_modules
[
r
][
6
]
!=
null
)
{
continue
}
_modules
[
r
][
6
]
=
(
r
%
2
==
0
)
}
for
(
var
c
=
8
;
c
<
_moduleCount
-
8
;
c
+=
1
)
{
if
(
_modules
[
6
][
c
]
!=
null
)
{
continue
}
_modules
[
6
][
c
]
=
(
c
%
2
==
0
)
}
}
var
setupPositionAdjustPattern
=
function
()
{
var
pos
=
QRUtil
.
getPatternPosition
(
_typeNumber
)
for
(
var
i
=
0
;
i
<
pos
.
length
;
i
+=
1
)
{
for
(
var
j
=
0
;
j
<
pos
.
length
;
j
+=
1
)
{
var
row
=
pos
[
i
]
var
col
=
pos
[
j
]
if
(
_modules
[
row
][
col
]
!=
null
)
{
continue
}
for
(
var
r
=
-
2
;
r
<=
2
;
r
+=
1
)
{
for
(
var
c
=
-
2
;
c
<=
2
;
c
+=
1
)
{
if
(
r
==
-
2
||
r
==
2
||
c
==
-
2
||
c
==
2
||
(
r
==
0
&&
c
==
0
)
)
{
_modules
[
row
+
r
][
col
+
c
]
=
true
}
else
{
_modules
[
row
+
r
][
col
+
c
]
=
false
}
}
}
}
}
}
var
setupTypeNumber
=
function
(
test
)
{
var
bits
=
QRUtil
.
getBCHTypeNumber
(
_typeNumber
)
for
(
var
i
=
0
;
i
<
18
;
i
+=
1
)
{
var
mod
=
(
!
test
&&
(
(
bits
>>
i
)
&
1
)
==
1
)
_modules
[
Math
.
floor
(
i
/
3
)][
i
%
3
+
_moduleCount
-
8
-
3
]
=
mod
}
for
(
var
i
=
0
;
i
<
18
;
i
+=
1
)
{
var
mod
=
(
!
test
&&
(
(
bits
>>
i
)
&
1
)
==
1
)
_modules
[
i
%
3
+
_moduleCount
-
8
-
3
][
Math
.
floor
(
i
/
3
)]
=
mod
}
}
var
setupTypeInfo
=
function
(
test
,
maskPattern
)
{
var
data
=
(
_errorCorrectLevel
<<
3
)
|
maskPattern
var
bits
=
QRUtil
.
getBCHTypeInfo
(
data
)
// vertical
for
(
var
i
=
0
;
i
<
15
;
i
+=
1
)
{
var
mod
=
(
!
test
&&
(
(
bits
>>
i
)
&
1
)
==
1
)
if
(
i
<
6
)
{
_modules
[
i
][
8
]
=
mod
}
else
if
(
i
<
8
)
{
_modules
[
i
+
1
][
8
]
=
mod
}
else
{
_modules
[
_moduleCount
-
15
+
i
][
8
]
=
mod
}
}
// horizontal
for
(
var
i
=
0
;
i
<
15
;
i
+=
1
)
{
var
mod
=
(
!
test
&&
(
(
bits
>>
i
)
&
1
)
==
1
)
if
(
i
<
8
)
{
_modules
[
8
][
_moduleCount
-
i
-
1
]
=
mod
}
else
if
(
i
<
9
)
{
_modules
[
8
][
15
-
i
-
1
+
1
]
=
mod
}
else
{
_modules
[
8
][
15
-
i
-
1
]
=
mod
}
}
// fixed module
_modules
[
_moduleCount
-
8
][
8
]
=
(
!
test
)
}
var
mapData
=
function
(
data
,
maskPattern
)
{
var
inc
=
-
1
var
row
=
_moduleCount
-
1
var
bitIndex
=
7
var
byteIndex
=
0
var
maskFunc
=
QRUtil
.
getMaskFunction
(
maskPattern
)
for
(
var
col
=
_moduleCount
-
1
;
col
>
0
;
col
-=
2
)
{
if
(
col
==
6
)
col
-=
1
while
(
true
)
{
for
(
var
c
=
0
;
c
<
2
;
c
+=
1
)
{
if
(
_modules
[
row
][
col
-
c
]
==
null
)
{
var
dark
=
false
if
(
byteIndex
<
data
.
length
)
{
dark
=
(
(
(
data
[
byteIndex
]
>>>
bitIndex
)
&
1
)
==
1
)
}
var
mask
=
maskFunc
(
row
,
col
-
c
)
if
(
mask
)
{
dark
=
!
dark
}
_modules
[
row
][
col
-
c
]
=
dark
bitIndex
-=
1
if
(
bitIndex
==
-
1
)
{
byteIndex
+=
1
bitIndex
=
7
}
}
}
row
+=
inc
if
(
row
<
0
||
_moduleCount
<=
row
)
{
row
-=
inc
inc
=
-
inc
break
case
QRErrorCorrectLevel
.
Q
:
nLimit
=
QRCodeLimitLength
[
i
][
2
]
}
}
}
}
var
createBytes
=
function
(
buffer
,
rsBlocks
)
{
var
offset
=
0
var
maxDcCount
=
0
var
maxEcCount
=
0
var
dcdata
=
new
Array
(
rsBlocks
.
length
)
var
ecdata
=
new
Array
(
rsBlocks
.
length
)
for
(
var
r
=
0
;
r
<
rsBlocks
.
length
;
r
+=
1
)
{
var
dcCount
=
rsBlocks
[
r
].
dataCount
var
ecCount
=
rsBlocks
[
r
].
totalCount
-
dcCount
maxDcCount
=
Math
.
max
(
maxDcCount
,
dcCount
)
maxEcCount
=
Math
.
max
(
maxEcCount
,
ecCount
)
dcdata
[
r
]
=
new
Array
(
dcCount
)
for
(
var
i
=
0
;
i
<
dcdata
[
r
].
length
;
i
+=
1
)
{
dcdata
[
r
][
i
]
=
0xff
&
buffer
.
getBuffer
()[
i
+
offset
]
}
offset
+=
dcCount
var
rsPoly
=
QRUtil
.
getErrorCorrectPolynomial
(
ecCount
)
var
rawPoly
=
qrPolynomial
(
dcdata
[
r
],
rsPoly
.
getLength
()
-
1
)
var
modPoly
=
rawPoly
.
mod
(
rsPoly
)
ecdata
[
r
]
=
new
Array
(
rsPoly
.
getLength
()
-
1
)
for
(
var
i
=
0
;
i
<
ecdata
[
r
].
length
;
i
+=
1
)
{
var
modIndex
=
i
+
modPoly
.
getLength
()
-
ecdata
[
r
].
length
ecdata
[
r
][
i
]
=
(
modIndex
>=
0
)?
modPoly
.
getAt
(
modIndex
)
:
0
}
}
var
totalCodeCount
=
0
for
(
var
i
=
0
;
i
<
rsBlocks
.
length
;
i
+=
1
)
{
totalCodeCount
+=
rsBlocks
[
i
].
totalCount
}
var
data
=
new
Array
(
totalCodeCount
)
var
index
=
0
for
(
var
i
=
0
;
i
<
maxDcCount
;
i
+=
1
)
{
for
(
var
r
=
0
;
r
<
rsBlocks
.
length
;
r
+=
1
)
{
if
(
i
<
dcdata
[
r
].
length
)
{
data
[
index
]
=
dcdata
[
r
][
i
]
index
+=
1
}
}
}
for
(
var
i
=
0
;
i
<
maxEcCount
;
i
+=
1
)
{
for
(
var
r
=
0
;
r
<
rsBlocks
.
length
;
r
+=
1
)
{
if
(
i
<
ecdata
[
r
].
length
)
{
data
[
index
]
=
ecdata
[
r
][
i
]
index
+=
1
}
}
}
return
data
}
var
createData
=
function
(
typeNumber
,
errorCorrectLevel
,
dataList
)
{
var
rsBlocks
=
QRRSBlock
.
getRSBlocks
(
typeNumber
,
errorCorrectLevel
)
var
buffer
=
qrBitBuffer
()
for
(
var
i
=
0
;
i
<
dataList
.
length
;
i
+=
1
)
{
var
data
=
dataList
[
i
]
buffer
.
put
(
data
.
getMode
(),
4
)
buffer
.
put
(
data
.
getLength
(),
QRUtil
.
getLengthInBits
(
data
.
getMode
(),
typeNumber
)
)
data
.
write
(
buffer
)
}
// calc num max data.
var
totalDataCount
=
0
for
(
var
i
=
0
;
i
<
rsBlocks
.
length
;
i
+=
1
)
{
totalDataCount
+=
rsBlocks
[
i
].
dataCount
}
if
(
buffer
.
getLengthInBits
()
>
totalDataCount
*
8
)
{
throw
new
Error
(
'code length overflow. ('
+
buffer
.
getLengthInBits
()
+
'>'
+
totalDataCount
*
8
+
')'
)
}
// end code
if
(
buffer
.
getLengthInBits
()
+
4
<=
totalDataCount
*
8
)
{
buffer
.
put
(
0
,
4
)
}
// padding
while
(
buffer
.
getLengthInBits
()
%
8
!=
0
)
{
buffer
.
putBit
(
false
)
}
// padding
while
(
true
)
{
if
(
buffer
.
getLengthInBits
()
>=
totalDataCount
*
8
)
{
break
case
QRErrorCorrectLevel
.
H
:
nLimit
=
QRCodeLimitLength
[
i
][
3
]
}
buffer
.
put
(
PAD0
,
8
)
if
(
buffer
.
getLengthInBits
()
>=
totalDataCount
*
8
)
{
break
}
buffer
.
put
(
PAD1
,
8
)
}
return
createBytes
(
buffer
,
rsBlocks
)
}
_this
.
addData
=
function
(
data
)
{
var
newData
=
qr8BitByte
(
data
)
_dataList
.
push
(
newData
)
_dataCache
=
null
}
_this
.
isDark
=
function
(
row
,
col
)
{
if
(
row
<
0
||
_moduleCount
<=
row
||
col
<
0
||
_moduleCount
<=
col
)
{
throw
new
Error
(
row
+
','
+
col
)
}
return
_modules
[
row
][
col
]
}
_this
.
getModuleCount
=
function
()
{
return
_moduleCount
}
_this
.
make
=
function
()
{
makeImpl
(
false
,
getBestMaskPattern
()
)
}
_this
.
createTableTag
=
function
(
cellSize
,
margin
)
{
cellSize
=
cellSize
||
2
margin
=
(
typeof
margin
==
'undefined'
)?
cellSize
*
4
:
margin
var
qrHtml
=
''
qrHtml
+=
'<table style="'
qrHtml
+=
' border-width: 0px; border-style: none;'
qrHtml
+=
' border-collapse: collapse;'
qrHtml
+=
' padding: 0px; margin: '
+
margin
+
'px;'
qrHtml
+=
'">'
qrHtml
+=
'<tbody>'
for
(
var
r
=
0
;
r
<
_this
.
getModuleCount
();
r
+=
1
)
{
qrHtml
+=
'<tr>'
for
(
var
c
=
0
;
c
<
_this
.
getModuleCount
();
c
+=
1
)
{
qrHtml
+=
'<td style="'
qrHtml
+=
' border-width: 0px; border-style: none;'
qrHtml
+=
' border-collapse: collapse;'
qrHtml
+=
' padding: 0px; margin: 0px;'
qrHtml
+=
' width: '
+
cellSize
+
'px;'
qrHtml
+=
' height: '
+
cellSize
+
'px;'
qrHtml
+=
' background-color: '
qrHtml
+=
_this
.
isDark
(
r
,
c
)?
'#000000'
:
'#ffffff'
qrHtml
+=
';'
qrHtml
+=
'"/>'
}
qrHtml
+=
'</tr>'
}
qrHtml
+=
'</tbody>'
qrHtml
+=
'</table>'
return
qrHtml
}
_this
.
createImgTag
=
function
(
cellSize
,
margin
,
size
)
{
cellSize
=
cellSize
||
2
margin
=
(
typeof
margin
==
'undefined'
)?
cellSize
*
4
:
margin
var
min
=
margin
var
max
=
_this
.
getModuleCount
()
*
cellSize
+
margin
return
createImgTag
(
size
,
size
,
function
(
x
,
y
)
{
if
(
min
<=
x
&&
x
<
max
&&
min
<=
y
&&
y
<
max
)
{
var
c
=
Math
.
floor
(
(
x
-
min
)
/
cellSize
)
var
r
=
Math
.
floor
(
(
y
-
min
)
/
cellSize
)
return
_this
.
isDark
(
r
,
c
)?
0
:
1
}
else
{
return
1
}
}
)
}
return
_this
}
//---------------------------------------------------------------------
// qrcode.stringToBytes
//---------------------------------------------------------------------
qrcode
.
stringToBytes
=
function
(
s
)
{
var
bytes
=
new
Array
()
for
(
var
i
=
0
;
i
<
s
.
length
;
i
+=
1
)
{
var
c
=
s
.
charCodeAt
(
i
)
bytes
.
push
(
c
&
0xff
)
}
return
bytes
}
//---------------------------------------------------------------------
// qrcode.createStringToBytes
//---------------------------------------------------------------------
/**
* @param unicodeData base64 string of byte array.
* [16bit Unicode],[16bit Bytes], ...
* @param numChars
*/
qrcode
.
createStringToBytes
=
function
(
unicodeData
,
numChars
)
{
// create conversion map.
var
unicodeMap
=
function
()
{
var
bin
=
base64DecodeInputStream
(
unicodeData
)
var
read
=
function
()
{
var
b
=
bin
.
read
()
if
(
b
==
-
1
)
throw
new
Error
()
return
b
}
var
count
=
0
var
unicodeMap
=
{}
while
(
true
)
{
var
b0
=
bin
.
read
()
if
(
b0
==
-
1
)
break
var
b1
=
read
()
var
b2
=
read
()
var
b3
=
read
()
var
k
=
String
.
fromCharCode
(
(
b0
<<
8
)
|
b1
)
var
v
=
(
b2
<<
8
)
|
b3
unicodeMap
[
k
]
=
v
count
+=
1
}
if
(
count
!=
numChars
)
{
throw
new
Error
(
count
+
' != '
+
numChars
)
}
return
unicodeMap
}()
var
unknownChar
=
'?'
.
charCodeAt
(
0
)
return
function
(
s
)
{
var
bytes
=
new
Array
()
for
(
var
i
=
0
;
i
<
s
.
length
;
i
+=
1
)
{
var
c
=
s
.
charCodeAt
(
i
)
if
(
c
<
128
)
{
bytes
.
push
(
c
)
}
else
{
var
b
=
unicodeMap
[
s
.
charAt
(
i
)]
if
(
typeof
b
==
'number'
)
{
if
(
(
b
&
0xff
)
==
b
)
{
// 1byte
bytes
.
push
(
b
)
}
else
{
// 2bytes
bytes
.
push
(
b
>>>
8
)
bytes
.
push
(
b
&
0xff
)
}
}
else
{
bytes
.
push
(
unknownChar
)
}
}
}
return
bytes
}
}
//---------------------------------------------------------------------
// QRMode
//---------------------------------------------------------------------
var
QRMode
=
{
MODE_NUMBER
:
1
<<
0
,
MODE_ALPHA_NUM
:
1
<<
1
,
MODE_8BIT_BYTE
:
1
<<
2
,
MODE_KANJI
:
1
<<
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
=
function
()
{
var
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
]
]
var
G15
=
(
1
<<
10
)
|
(
1
<<
8
)
|
(
1
<<
5
)
|
(
1
<<
4
)
|
(
1
<<
2
)
|
(
1
<<
1
)
|
(
1
<<
0
)
var
G18
=
(
1
<<
12
)
|
(
1
<<
11
)
|
(
1
<<
10
)
|
(
1
<<
9
)
|
(
1
<<
8
)
|
(
1
<<
5
)
|
(
1
<<
2
)
|
(
1
<<
0
)
var
G15_MASK
=
(
1
<<
14
)
|
(
1
<<
12
)
|
(
1
<<
10
)
|
(
1
<<
4
)
|
(
1
<<
1
)
var
_this
=
{}
var
getBCHDigit
=
function
(
data
)
{
var
digit
=
0
while
(
data
!=
0
)
{
digit
+=
1
data
>>>=
1
}
return
digit
}
_this
.
getBCHTypeInfo
=
function
(
data
)
{
var
d
=
data
<<
10
while
(
getBCHDigit
(
d
)
-
getBCHDigit
(
G15
)
>=
0
)
{
d
^=
(
G15
<<
(
getBCHDigit
(
d
)
-
getBCHDigit
(
G15
)
)
)
}
return
(
(
data
<<
10
)
|
d
)
^
G15_MASK
}
_this
.
getBCHTypeNumber
=
function
(
data
)
{
var
d
=
data
<<
12
while
(
getBCHDigit
(
d
)
-
getBCHDigit
(
G18
)
>=
0
)
{
d
^=
(
G18
<<
(
getBCHDigit
(
d
)
-
getBCHDigit
(
G18
)
)
)
}
return
(
data
<<
12
)
|
d
}
_this
.
getPatternPosition
=
function
(
typeNumber
)
{
return
PATTERN_POSITION_TABLE
[
typeNumber
-
1
]
}
_this
.
getMaskFunction
=
function
(
maskPattern
)
{
switch
(
maskPattern
)
{
case
QRMaskPattern
.
PATTERN000
:
return
function
(
i
,
j
)
{
return
(
i
+
j
)
%
2
==
0
}
case
QRMaskPattern
.
PATTERN001
:
return
function
(
i
,
j
)
{
return
i
%
2
==
0
}
case
QRMaskPattern
.
PATTERN010
:
return
function
(
i
,
j
)
{
return
j
%
3
==
0
}
case
QRMaskPattern
.
PATTERN011
:
return
function
(
i
,
j
)
{
return
(
i
+
j
)
%
3
==
0
}
case
QRMaskPattern
.
PATTERN100
:
return
function
(
i
,
j
)
{
return
(
Math
.
floor
(
i
/
2
)
+
Math
.
floor
(
j
/
3
)
)
%
2
==
0
}
case
QRMaskPattern
.
PATTERN101
:
return
function
(
i
,
j
)
{
return
(
i
*
j
)
%
2
+
(
i
*
j
)
%
3
==
0
}
case
QRMaskPattern
.
PATTERN110
:
return
function
(
i
,
j
)
{
return
(
(
i
*
j
)
%
2
+
(
i
*
j
)
%
3
)
%
2
==
0
}
case
QRMaskPattern
.
PATTERN111
:
return
function
(
i
,
j
)
{
return
(
(
i
*
j
)
%
3
+
(
i
+
j
)
%
2
)
%
2
==
0
}
default
:
throw
new
Error
(
'bad maskPattern:'
+
maskPattern
)
}
}
_this
.
getErrorCorrectPolynomial
=
function
(
errorCorrectLength
)
{
var
a
=
qrPolynomial
([
1
],
0
)
for
(
var
i
=
0
;
i
<
errorCorrectLength
;
i
+=
1
)
{
a
=
a
.
multiply
(
qrPolynomial
([
1
,
QRMath
.
gexp
(
i
)],
0
)
)
}
return
a
}
_this
.
getLengthInBits
=
function
(
mode
,
type
)
{
if
(
1
<=
type
&&
type
<
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
<
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
<
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
)
}
}
_this
.
getLostPoint
=
function
(
qrcode
)
{
var
moduleCount
=
qrcode
.
getModuleCount
()
var
lostPoint
=
0
// LEVEL1
for
(
var
row
=
0
;
row
<
moduleCount
;
row
+=
1
)
{
for
(
var
col
=
0
;
col
<
moduleCount
;
col
+=
1
)
{
var
sameCount
=
0
var
dark
=
qrcode
.
isDark
(
row
,
col
)
for
(
var
r
=
-
1
;
r
<=
1
;
r
+=
1
)
{
if
(
row
+
r
<
0
||
moduleCount
<=
row
+
r
)
{
continue
}
for
(
var
c
=
-
1
;
c
<=
1
;
c
+=
1
)
{
if
(
col
+
c
<
0
||
moduleCount
<=
col
+
c
)
{
continue
}
if
(
r
==
0
&&
c
==
0
)
{
continue
}
if
(
dark
==
qrcode
.
isDark
(
row
+
r
,
col
+
c
)
)
{
sameCount
+=
1
}
}
}
if
(
sameCount
>
5
)
{
lostPoint
+=
(
3
+
sameCount
-
5
)
}
}
};
// LEVEL2
for
(
var
row
=
0
;
row
<
moduleCount
-
1
;
row
+=
1
)
{
for
(
var
col
=
0
;
col
<
moduleCount
-
1
;
col
+=
1
)
{
var
count
=
0
if
(
qrcode
.
isDark
(
row
,
col
)
)
count
+=
1
if
(
qrcode
.
isDark
(
row
+
1
,
col
)
)
count
+=
1
if
(
qrcode
.
isDark
(
row
,
col
+
1
)
)
count
+=
1
if
(
qrcode
.
isDark
(
row
+
1
,
col
+
1
)
)
count
+=
1
if
(
count
==
0
||
count
==
4
)
{
lostPoint
+=
3
}
}
}
// LEVEL3
for
(
var
row
=
0
;
row
<
moduleCount
;
row
+=
1
)
{
for
(
var
col
=
0
;
col
<
moduleCount
-
6
;
col
+=
1
)
{
if
(
qrcode
.
isDark
(
row
,
col
)
&&
!
qrcode
.
isDark
(
row
,
col
+
1
)
&&
qrcode
.
isDark
(
row
,
col
+
2
)
&&
qrcode
.
isDark
(
row
,
col
+
3
)
&&
qrcode
.
isDark
(
row
,
col
+
4
)
&&
!
qrcode
.
isDark
(
row
,
col
+
5
)
&&
qrcode
.
isDark
(
row
,
col
+
6
)
)
{
lostPoint
+=
40
}
}
}
for
(
var
col
=
0
;
col
<
moduleCount
;
col
+=
1
)
{
for
(
var
row
=
0
;
row
<
moduleCount
-
6
;
row
+=
1
)
{
if
(
qrcode
.
isDark
(
row
,
col
)
&&
!
qrcode
.
isDark
(
row
+
1
,
col
)
&&
qrcode
.
isDark
(
row
+
2
,
col
)
&&
qrcode
.
isDark
(
row
+
3
,
col
)
&&
qrcode
.
isDark
(
row
+
4
,
col
)
&&
!
qrcode
.
isDark
(
row
+
5
,
col
)
&&
qrcode
.
isDark
(
row
+
6
,
col
)
)
{
lostPoint
+=
40
}
}
}
// LEVEL4
var
darkCount
=
0
for
(
var
col
=
0
;
col
<
moduleCount
;
col
+=
1
)
{
for
(
var
row
=
0
;
row
<
moduleCount
;
row
+=
1
)
{
if
(
qrcode
.
isDark
(
row
,
col
)
)
{
darkCount
+=
1
}
}
}
var
ratio
=
Math
.
abs
(
100
*
darkCount
/
moduleCount
/
moduleCount
-
50
)
/
5
lostPoint
+=
ratio
*
10
return
lostPoint
}
return
_this
}()
//---------------------------------------------------------------------
// QRMath
//---------------------------------------------------------------------
var
QRMath
=
function
()
{
var
EXP_TABLE
=
new
Array
(
256
)
var
LOG_TABLE
=
new
Array
(
256
)
// initialize tables
for
(
var
i
=
0
;
i
<
8
;
i
+=
1
)
{
EXP_TABLE
[
i
]
=
1
<<
i
}
for
(
var
i
=
8
;
i
<
256
;
i
+=
1
)
{
EXP_TABLE
[
i
]
=
EXP_TABLE
[
i
-
4
]
^
EXP_TABLE
[
i
-
5
]
^
EXP_TABLE
[
i
-
6
]
^
EXP_TABLE
[
i
-
8
]
}
for
(
var
i
=
0
;
i
<
255
;
i
+=
1
)
{
LOG_TABLE
[
EXP_TABLE
[
i
]
]
=
i
}
var
_this
=
{}
_this
.
glog
=
function
(
n
)
{
if
(
n
<
1
)
{
throw
new
Error
(
'glog('
+
n
+
')'
)
}
return
LOG_TABLE
[
n
]
}
if
(
length
<=
nLimit
)
{
break
}
else
{
nType
++
_this
.
gexp
=
function
(
n
)
{
while
(
n
<
0
)
{
n
+=
255
}
while
(
n
>=
256
)
{
n
-=
255
}
return
EXP_TABLE
[
n
]
}
return
_this
}()
//---------------------------------------------------------------------
// qrPolynomial
//---------------------------------------------------------------------
function
qrPolynomial
(
num
,
shift
)
{
if
(
typeof
num
.
length
==
'undefined'
)
{
throw
new
Error
(
num
.
length
+
'/'
+
shift
)
}
var
_num
=
function
()
{
var
offset
=
0
while
(
offset
<
num
.
length
&&
num
[
offset
]
==
0
)
{
offset
+=
1
}
var
_num
=
new
Array
(
num
.
length
-
offset
+
shift
)
for
(
var
i
=
0
;
i
<
num
.
length
-
offset
;
i
+=
1
)
{
_num
[
i
]
=
num
[
i
+
offset
]
}
return
_num
}()
var
_this
=
{}
_this
.
getAt
=
function
(
index
)
{
return
_num
[
index
]
}
_this
.
getLength
=
function
()
{
return
_num
.
length
}
_this
.
multiply
=
function
(
e
)
{
var
num
=
new
Array
(
_this
.
getLength
()
+
e
.
getLength
()
-
1
)
for
(
var
i
=
0
;
i
<
_this
.
getLength
();
i
+=
1
)
{
for
(
var
j
=
0
;
j
<
e
.
getLength
();
j
+=
1
)
{
num
[
i
+
j
]
^=
QRMath
.
gexp
(
QRMath
.
glog
(
_this
.
getAt
(
i
)
)
+
QRMath
.
glog
(
e
.
getAt
(
j
)
)
)
}
}
return
qrPolynomial
(
num
,
0
)
}
_this
.
mod
=
function
(
e
)
{
if
(
_this
.
getLength
()
-
e
.
getLength
()
<
0
)
{
return
_this
}
var
ratio
=
QRMath
.
glog
(
_this
.
getAt
(
0
)
)
-
QRMath
.
glog
(
e
.
getAt
(
0
)
)
var
num
=
new
Array
(
_this
.
getLength
()
)
for
(
var
i
=
0
;
i
<
_this
.
getLength
();
i
+=
1
)
{
num
[
i
]
=
_this
.
getAt
(
i
)
}
for
(
var
i
=
0
;
i
<
e
.
getLength
();
i
+=
1
)
{
num
[
i
]
^=
QRMath
.
gexp
(
QRMath
.
glog
(
e
.
getAt
(
i
)
)
+
ratio
)
}
// recursive call
return
qrPolynomial
(
num
,
0
).
mod
(
e
)
}
return
_this
};
//---------------------------------------------------------------------
// QRRSBlock
//---------------------------------------------------------------------
var
QRRSBlock
=
function
()
{
// [1: [L, M, Q, H], ..]
var
RS_BLOCK_TABLE
=
[[
1
,
26
,
19
],[
1
,
26
,
16
],[
1
,
26
,
13
],[
1
,
26
,
9
],[
1
,
44
,
34
],[
1
,
44
,
28
],[
1
,
44
,
22
],[
1
,
44
,
16
],[
1
,
70
,
55
],[
1
,
70
,
44
],[
2
,
35
,
17
],[
2
,
35
,
13
],[
1
,
100
,
80
],[
2
,
50
,
32
],[
2
,
50
,
24
],[
4
,
25
,
9
],[
1
,
134
,
108
],[
2
,
67
,
43
],[
2
,
33
,
15
,
2
,
34
,
16
],[
2
,
33
,
11
,
2
,
34
,
12
],[
2
,
86
,
68
],[
4
,
43
,
27
],[
4
,
43
,
19
],[
4
,
43
,
15
],[
2
,
98
,
78
],[
4
,
49
,
31
],[
2
,
32
,
14
,
4
,
33
,
15
],[
4
,
39
,
13
,
1
,
40
,
14
],[
2
,
121
,
97
],[
2
,
60
,
38
,
2
,
61
,
39
],[
4
,
40
,
18
,
2
,
41
,
19
],[
4
,
40
,
14
,
2
,
41
,
15
],[
2
,
146
,
116
],[
3
,
58
,
36
,
2
,
59
,
37
],[
4
,
36
,
16
,
4
,
37
,
17
],[
4
,
36
,
12
,
4
,
37
,
13
],[
2
,
86
,
68
,
2
,
87
,
69
],[
4
,
69
,
43
,
1
,
70
,
44
],[
6
,
43
,
19
,
2
,
44
,
20
],[
6
,
43
,
15
,
2
,
44
,
16
],[
4
,
101
,
81
],[
1
,
80
,
50
,
4
,
81
,
51
],[
4
,
50
,
22
,
4
,
51
,
23
],[
3
,
36
,
12
,
8
,
37
,
13
],[
2
,
116
,
92
,
2
,
117
,
93
],[
6
,
58
,
36
,
2
,
59
,
37
],[
4
,
46
,
20
,
6
,
47
,
21
],[
7
,
42
,
14
,
4
,
43
,
15
],[
4
,
133
,
107
],[
8
,
59
,
37
,
1
,
60
,
38
],[
8
,
44
,
20
,
4
,
45
,
21
],[
12
,
33
,
11
,
4
,
34
,
12
],[
3
,
145
,
115
,
1
,
146
,
116
],[
4
,
64
,
40
,
5
,
65
,
41
],[
11
,
36
,
16
,
5
,
37
,
17
],[
11
,
36
,
12
,
5
,
37
,
13
],[
5
,
109
,
87
,
1
,
110
,
88
],[
5
,
65
,
41
,
5
,
66
,
42
],[
5
,
54
,
24
,
7
,
55
,
25
],[
11
,
36
,
12
],[
5
,
122
,
98
,
1
,
123
,
99
],[
7
,
73
,
45
,
3
,
74
,
46
],[
15
,
43
,
19
,
2
,
44
,
20
],[
3
,
45
,
15
,
13
,
46
,
16
],[
1
,
135
,
107
,
5
,
136
,
108
],[
10
,
74
,
46
,
1
,
75
,
47
],[
1
,
50
,
22
,
15
,
51
,
23
],[
2
,
42
,
14
,
17
,
43
,
15
],[
5
,
150
,
120
,
1
,
151
,
121
],[
9
,
69
,
43
,
4
,
70
,
44
],[
17
,
50
,
22
,
1
,
51
,
23
],[
2
,
42
,
14
,
19
,
43
,
15
],[
3
,
141
,
113
,
4
,
142
,
114
],[
3
,
70
,
44
,
11
,
71
,
45
],[
17
,
47
,
21
,
4
,
48
,
22
],[
9
,
39
,
13
,
16
,
40
,
14
],[
3
,
135
,
107
,
5
,
136
,
108
],[
3
,
67
,
41
,
13
,
68
,
42
],[
15
,
54
,
24
,
5
,
55
,
25
],[
15
,
43
,
15
,
10
,
44
,
16
],[
4
,
144
,
116
,
4
,
145
,
117
],[
17
,
68
,
42
],[
17
,
50
,
22
,
6
,
51
,
23
],[
19
,
46
,
16
,
6
,
47
,
17
],[
2
,
139
,
111
,
7
,
140
,
112
],[
17
,
74
,
46
],[
7
,
54
,
24
,
16
,
55
,
25
],[
34
,
37
,
13
],[
4
,
151
,
121
,
5
,
152
,
122
],[
4
,
75
,
47
,
14
,
76
,
48
],[
11
,
54
,
24
,
14
,
55
,
25
],[
16
,
45
,
15
,
14
,
46
,
16
],[
6
,
147
,
117
,
4
,
148
,
118
],[
6
,
73
,
45
,
14
,
74
,
46
],[
11
,
54
,
24
,
16
,
55
,
25
],[
30
,
46
,
16
,
2
,
47
,
17
],[
8
,
132
,
106
,
4
,
133
,
107
],[
8
,
75
,
47
,
13
,
76
,
48
],[
7
,
54
,
24
,
22
,
55
,
25
],[
22
,
45
,
15
,
13
,
46
,
16
],[
10
,
142
,
114
,
2
,
143
,
115
],[
19
,
74
,
46
,
4
,
75
,
47
],[
28
,
50
,
22
,
6
,
51
,
23
],[
33
,
46
,
16
,
4
,
47
,
17
],[
8
,
152
,
122
,
4
,
153
,
123
],[
22
,
73
,
45
,
3
,
74
,
46
],[
8
,
53
,
23
,
26
,
54
,
24
],[
12
,
45
,
15
,
28
,
46
,
16
],[
3
,
147
,
117
,
10
,
148
,
118
],[
3
,
73
,
45
,
23
,
74
,
46
],[
4
,
54
,
24
,
31
,
55
,
25
],[
11
,
45
,
15
,
31
,
46
,
16
],[
7
,
146
,
116
,
7
,
147
,
117
],[
21
,
73
,
45
,
7
,
74
,
46
],[
1
,
53
,
23
,
37
,
54
,
24
],[
19
,
45
,
15
,
26
,
46
,
16
],[
5
,
145
,
115
,
10
,
146
,
116
],[
19
,
75
,
47
,
10
,
76
,
48
],[
15
,
54
,
24
,
25
,
55
,
25
],[
23
,
45
,
15
,
25
,
46
,
16
],[
13
,
145
,
115
,
3
,
146
,
116
],[
2
,
74
,
46
,
29
,
75
,
47
],[
42
,
54
,
24
,
1
,
55
,
25
],[
23
,
45
,
15
,
28
,
46
,
16
],[
17
,
145
,
115
],[
10
,
74
,
46
,
23
,
75
,
47
],[
10
,
54
,
24
,
35
,
55
,
25
],[
19
,
45
,
15
,
35
,
46
,
16
],[
17
,
145
,
115
,
1
,
146
,
116
],[
14
,
74
,
46
,
21
,
75
,
47
],[
29
,
54
,
24
,
19
,
55
,
25
],[
11
,
45
,
15
,
46
,
46
,
16
],[
13
,
145
,
115
,
6
,
146
,
116
],[
14
,
74
,
46
,
23
,
75
,
47
],[
44
,
54
,
24
,
7
,
55
,
25
],[
59
,
46
,
16
,
1
,
47
,
17
],[
12
,
151
,
121
,
7
,
152
,
122
],[
12
,
75
,
47
,
26
,
76
,
48
],[
39
,
54
,
24
,
14
,
55
,
25
],[
22
,
45
,
15
,
41
,
46
,
16
],[
6
,
151
,
121
,
14
,
152
,
122
],[
6
,
75
,
47
,
34
,
76
,
48
],[
46
,
54
,
24
,
10
,
55
,
25
],[
2
,
45
,
15
,
64
,
46
,
16
],[
17
,
152
,
122
,
4
,
153
,
123
],[
29
,
74
,
46
,
14
,
75
,
47
],[
49
,
54
,
24
,
10
,
55
,
25
],[
24
,
45
,
15
,
46
,
46
,
16
],[
4
,
152
,
122
,
18
,
153
,
123
],[
13
,
74
,
46
,
32
,
75
,
47
],[
48
,
54
,
24
,
14
,
55
,
25
],[
42
,
45
,
15
,
32
,
46
,
16
],[
20
,
147
,
117
,
4
,
148
,
118
],[
40
,
75
,
47
,
7
,
76
,
48
],[
43
,
54
,
24
,
22
,
55
,
25
],[
10
,
45
,
15
,
67
,
46
,
16
],[
19
,
148
,
118
,
6
,
149
,
119
],[
18
,
75
,
47
,
31
,
76
,
48
],[
34
,
54
,
24
,
34
,
55
,
25
],[
20
,
45
,
15
,
61
,
46
,
16
]]
var
qrRSBlock
=
function
(
totalCount
,
dataCount
)
{
var
_this
=
{}
_this
.
totalCount
=
totalCount
_this
.
dataCount
=
dataCount
return
_this
}
var
_this
=
{}
var
getRsBlockTable
=
function
(
typeNumber
,
errorCorrectLevel
)
{
switch
(
errorCorrectLevel
)
{
case
QRErrorCorrectLevel
.
L
:
return
RS_BLOCK_TABLE
[(
typeNumber
-
1
)
*
4
+
0
]
case
QRErrorCorrectLevel
.
M
:
return
RS_BLOCK_TABLE
[(
typeNumber
-
1
)
*
4
+
1
]
case
QRErrorCorrectLevel
.
Q
:
return
RS_BLOCK_TABLE
[(
typeNumber
-
1
)
*
4
+
2
]
case
QRErrorCorrectLevel
.
H
:
return
RS_BLOCK_TABLE
[(
typeNumber
-
1
)
*
4
+
3
]
default
:
return
undefined
}
}
_this
.
getRSBlocks
=
function
(
typeNumber
,
errorCorrectLevel
)
{
var
rsBlock
=
getRsBlockTable
(
typeNumber
,
errorCorrectLevel
)
if
(
typeof
rsBlock
==
'undefined'
)
{
throw
new
Error
(
'bad rs block @ typeNumber:'
+
typeNumber
+
'/errorCorrectLevel:'
+
errorCorrectLevel
)
}
var
length
=
rsBlock
.
length
/
3
var
list
=
new
Array
()
for
(
var
i
=
0
;
i
<
length
;
i
+=
1
)
{
var
count
=
rsBlock
[
i
*
3
+
0
]
var
totalCount
=
rsBlock
[
i
*
3
+
1
]
var
dataCount
=
rsBlock
[
i
*
3
+
2
]
for
(
var
j
=
0
;
j
<
count
;
j
+=
1
)
{
list
.
push
(
qrRSBlock
(
totalCount
,
dataCount
)
)
}
}
return
list
}
return
_this
}()
//---------------------------------------------------------------------
// qrBitBuffer
//---------------------------------------------------------------------
var
qrBitBuffer
=
function
()
{
var
_buffer
=
new
Array
()
var
_length
=
0
var
_this
=
{}
_this
.
getBuffer
=
function
()
{
return
_buffer
}
_this
.
getAt
=
function
(
index
)
{
var
bufIndex
=
Math
.
floor
(
index
/
8
)
return
(
(
_buffer
[
bufIndex
]
>>>
(
7
-
index
%
8
)
)
&
1
)
==
1
}
if
(
nType
>
QRCodeLimitLength
.
length
)
{
throw
new
Error
(
'Too long data'
)
_this
.
put
=
function
(
num
,
length
)
{
for
(
var
i
=
0
;
i
<
length
;
i
+=
1
)
{
_this
.
putBit
(
(
(
num
>>>
(
length
-
i
-
1
)
)
&
1
)
==
1
)
}
}
_this
.
getLengthInBits
=
function
()
{
return
_length
}
_this
.
putBit
=
function
(
bit
)
{
return
nType
var
bufIndex
=
Math
.
floor
(
_length
/
8
)
if
(
_buffer
.
length
<=
bufIndex
)
{
_buffer
.
push
(
0
)
}
function
_getUTF8Length
(
sText
)
{
var
replacedText
=
encodeURI
(
sText
).
toString
().
replace
(
/
\%[
0-9a-fA-F
]{2}
/g
,
'a'
)
return
replacedText
.
length
+
(
replacedText
.
length
!=
sText
?
3
:
0
)
if
(
bit
)
{
_buffer
[
bufIndex
]
|=
(
0x80
>>>
(
_length
%
8
)
)
}
function
QR8bitByte
(
data
)
{
this
.
mode
=
QRMode
.
MODE_8BIT_BYTE
this
.
data
=
data
this
.
parsedData
=
[]
_length
+=
1
}
return
_this
}
//---------------------------------------------------------------------
// qr8BitByte
//---------------------------------------------------------------------
var
qr8BitByte
=
function
(
data
)
{
var
_mode
=
QRMode
.
MODE_8BIT_BYTE
var
_data
=
data
var
_parsedData
=
[]
var
_this
=
{}
// Added to support UTF-8 Characters
for
(
var
i
=
0
,
l
=
this
.
data
.
length
;
i
<
l
;
i
++
)
{
for
(
var
i
=
0
,
l
=
_
data
.
length
;
i
<
l
;
i
++
)
{
var
byteArray
=
[]
var
code
=
this
.
data
.
charCodeAt
(
i
)
var
code
=
_
data
.
charCodeAt
(
i
)
if
(
code
>
0x10000
)
{
byteArray
[
0
]
=
0xF0
|
((
code
&
0x1C0000
)
>>>
18
)
...
...
@@ -77,350 +1099,500 @@ var QRCode;
byteArray
[
0
]
=
code
}
this
.
parsedData
.
push
(
byteArray
)
// Fix Unicode corruption bug
_parsedData
.
push
(
byteArray
)
}
this
.
parsedData
=
Array
.
prototype
.
concat
.
apply
([],
this
.
parsedData
)
_parsedData
=
Array
.
prototype
.
concat
.
apply
([],
_
parsedData
)
if
(
this
.
parsedData
.
length
!=
this
.
data
.
length
)
{
this
.
parsedData
.
unshift
(
191
)
this
.
parsedData
.
unshift
(
187
)
this
.
parsedData
.
unshift
(
239
)
if
(
_parsedData
.
length
!=
_
data
.
length
)
{
_
parsedData
.
unshift
(
191
)
_
parsedData
.
unshift
(
187
)
_
parsedData
.
unshift
(
239
)
}
var
_bytes
=
_parsedData
_this
.
getMode
=
function
()
{
return
_mode
}
QR8bitByte
.
prototype
=
{
getLength
:
function
(
buffer
)
{
return
this
.
parsedData
.
length
},
write
:
function
(
buffer
)
{
for
(
var
i
=
0
,
l
=
this
.
parsedData
.
length
;
i
<
l
;
i
++
)
{
buffer
.
put
(
this
.
parsedData
[
i
],
8
)
_this
.
getLength
=
function
(
buffer
)
{
return
_bytes
.
length
}
_this
.
write
=
function
(
buffer
)
{
for
(
var
i
=
0
;
i
<
_bytes
.
length
;
i
+=
1
)
{
buffer
.
put
(
_bytes
[
i
],
8
)
}
}
return
_this
}
//=====================================================================
// GIF Support etc.
//
//---------------------------------------------------------------------
// byteArrayOutputStream
//---------------------------------------------------------------------
// QRCodeModel
function
QRCodeModel
(
typeNumber
,
errorCorrectLevel
)
{
this
.
typeNumber
=
typeNumber
this
.
errorCorrectLevel
=
errorCorrectLevel
this
.
modules
=
null
this
.
moduleCount
=
0
this
.
dataCache
=
null
this
.
dataList
=
[]
var
byteArrayOutputStream
=
function
()
{
var
_bytes
=
new
Array
()
var
_this
=
{}
_this
.
writeByte
=
function
(
b
)
{
_bytes
.
push
(
b
&
0xff
)
}
QRCodeModel
.
prototype
=
{
addData
:
function
(
data
)
{
var
newData
=
new
QR8bitByte
(
data
);
this
.
dataList
.
push
(
newData
);
this
.
dataCache
=
null
},
isDark
:
function
(
row
,
col
)
{
if
(
row
<
0
||
this
.
moduleCount
<=
row
||
col
<
0
||
this
.
moduleCount
<=
col
)
{
throw
new
Error
(
row
+
','
+
col
)
}
return
this
.
modules
[
row
][
col
]
},
getModuleCount
:
function
()
{
return
this
.
moduleCount
},
make
:
function
()
{
this
.
makeImpl
(
false
,
this
.
getBestMaskPattern
())
},
makeImpl
:
function
(
test
,
maskPattern
)
{
this
.
moduleCount
=
this
.
typeNumber
*
4
+
17
;
this
.
modules
=
new
Array
(
this
.
moduleCount
);
for
(
var
row
=
0
;
row
<
this
.
moduleCount
;
row
++
)
{
this
.
modules
[
row
]
=
new
Array
(
this
.
moduleCount
);
for
(
var
col
=
0
;
col
<
this
.
moduleCount
;
col
++
)
{
this
.
modules
[
row
][
col
]
=
null
}
}
this
.
setupPositionProbePattern
(
0
,
0
);
this
.
setupPositionProbePattern
(
this
.
moduleCount
-
7
,
0
);
this
.
setupPositionProbePattern
(
0
,
this
.
moduleCount
-
7
);
this
.
setupPositionAdjustPattern
();
this
.
setupTimingPattern
();
this
.
setupTypeInfo
(
test
,
maskPattern
);
if
(
this
.
typeNumber
>=
7
)
{
this
.
setupTypeNumber
(
test
)
}
if
(
this
.
dataCache
==
null
)
{
this
.
dataCache
=
QRCodeModel
.
createData
(
this
.
typeNumber
,
this
.
errorCorrectLevel
,
this
.
dataList
)
}
this
.
mapData
(
this
.
dataCache
,
maskPattern
)
},
setupPositionProbePattern
:
function
(
row
,
col
)
{
for
(
var
r
=
-
1
;
r
<=
7
;
r
++
)
{
if
(
row
+
r
<=
-
1
||
this
.
moduleCount
<=
row
+
r
)
continue
;
for
(
var
c
=
-
1
;
c
<=
7
;
c
++
)
{
if
(
col
+
c
<=
-
1
||
this
.
moduleCount
<=
col
+
c
)
continue
;
if
((
0
<=
r
&&
r
<=
6
&&
(
c
==
0
||
c
==
6
))
||
(
0
<=
c
&&
c
<=
6
&&
(
r
==
0
||
r
==
6
))
||
(
2
<=
r
&&
r
<=
4
&&
2
<=
c
&&
c
<=
4
))
{
this
.
modules
[
row
+
r
][
col
+
c
]
=
true
}
else
{
this
.
modules
[
row
+
r
][
col
+
c
]
=
false
}
}
}
},
getBestMaskPattern
:
function
()
{
var
minLostPoint
=
0
;
var
pattern
=
0
;
for
(
var
i
=
0
;
i
<
8
;
i
++
)
{
this
.
makeImpl
(
true
,
i
);
var
lostPoint
=
QRUtil
.
getLostPoint
(
this
);
if
(
i
==
0
||
minLostPoint
>
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
;
this
.
make
();
for
(
var
row
=
0
;
row
<
this
.
modules
.
length
;
row
++
)
{
var
y
=
row
*
cs
;
for
(
var
col
=
0
;
col
<
this
.
modules
[
row
].
length
;
col
++
)
{
var
x
=
col
*
cs
;
var
dark
=
this
.
modules
[
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
<
this
.
moduleCount
-
8
;
r
++
)
{
if
(
this
.
modules
[
r
][
6
]
!=
null
)
{
continue
}
this
.
modules
[
r
][
6
]
=
(
r
%
2
==
0
)
}
for
(
var
c
=
8
;
c
<
this
.
moduleCount
-
8
;
c
++
)
{
if
(
this
.
modules
[
6
][
c
]
!=
null
)
{
continue
}
this
.
modules
[
6
][
c
]
=
(
c
%
2
==
0
)
}
},
setupPositionAdjustPattern
:
function
()
{
var
pos
=
QRUtil
.
getPatternPosition
(
this
.
typeNumber
);
for
(
var
i
=
0
;
i
<
pos
.
length
;
i
++
)
{
for
(
var
j
=
0
;
j
<
pos
.
length
;
j
++
)
{
var
row
=
pos
[
i
];
var
col
=
pos
[
j
];
if
(
this
.
modules
[
row
][
col
]
!=
null
)
{
continue
}
for
(
var
r
=
-
2
;
r
<=
2
;
r
++
)
{
for
(
var
c
=
-
2
;
c
<=
2
;
c
++
)
{
if
(
r
==
-
2
||
r
==
2
||
c
==
-
2
||
c
==
2
||
(
r
==
0
&&
c
==
0
))
{
this
.
modules
[
row
+
r
][
col
+
c
]
=
true
}
else
{
this
.
modules
[
row
+
r
][
col
+
c
]
=
false
}
}
}
}
}
},
setupTypeNumber
:
function
(
test
)
{
var
bits
=
QRUtil
.
getBCHTypeNumber
(
this
.
typeNumber
);
for
(
var
i
=
0
;
i
<
18
;
i
++
)
{
var
mod
=
(
!
test
&&
((
bits
>>
i
)
&
1
)
==
1
);
this
.
modules
[
Math
.
floor
(
i
/
3
)][
i
%
3
+
this
.
moduleCount
-
8
-
3
]
=
mod
}
for
(
var
i
=
0
;
i
<
18
;
i
++
)
{
var
mod
=
(
!
test
&&
((
bits
>>
i
)
&
1
)
==
1
);
this
.
modules
[
i
%
3
+
this
.
moduleCount
-
8
-
3
][
Math
.
floor
(
i
/
3
)]
=
mod
}
},
setupTypeInfo
:
function
(
test
,
maskPattern
)
{
var
data
=
(
this
.
errorCorrectLevel
<<
3
)
|
maskPattern
;
var
bits
=
QRUtil
.
getBCHTypeInfo
(
data
);
for
(
var
i
=
0
;
i
<
15
;
i
++
)
{
var
mod
=
(
!
test
&&
((
bits
>>
i
)
&
1
)
==
1
);
if
(
i
<
6
)
{
this
.
modules
[
i
][
8
]
=
mod
}
else
if
(
i
<
8
)
{
this
.
modules
[
i
+
1
][
8
]
=
mod
}
else
{
this
.
modules
[
this
.
moduleCount
-
15
+
i
][
8
]
=
mod
}
}
for
(
var
i
=
0
;
i
<
15
;
i
++
)
{
var
mod
=
(
!
test
&&
((
bits
>>
i
)
&
1
)
==
1
);
if
(
i
<
8
)
{
this
.
modules
[
8
][
this
.
moduleCount
-
i
-
1
]
=
mod
}
else
if
(
i
<
9
)
{
this
.
modules
[
8
][
15
-
i
-
1
+
1
]
=
mod
}
else
{
this
.
modules
[
8
][
15
-
i
-
1
]
=
mod
}
}
this
.
modules
[
this
.
moduleCount
-
8
][
8
]
=
(
!
test
)
},
mapData
:
function
(
data
,
maskPattern
)
{
var
inc
=
-
1
;
var
row
=
this
.
moduleCount
-
1
;
var
bitIndex
=
7
;
var
byteIndex
=
0
;
for
(
var
col
=
this
.
moduleCount
-
1
;
col
>
0
;
col
-=
2
)
{
if
(
col
==
6
)
col
--
;
while
(
true
)
{
for
(
var
c
=
0
;
c
<
2
;
c
++
)
{
if
(
this
.
modules
[
row
][
col
-
c
]
==
null
)
{
var
dark
=
false
;
if
(
byteIndex
<
data
.
length
)
{
dark
=
(((
data
[
byteIndex
]
>>>
bitIndex
)
&
1
)
==
1
)
}
var
mask
=
QRUtil
.
getMask
(
maskPattern
,
row
,
col
-
c
);
if
(
mask
)
{
dark
=
!
dark
}
this
.
modules
[
row
][
col
-
c
]
=
dark
;
bitIndex
--
;
if
(
bitIndex
==
-
1
)
{
byteIndex
++
;
bitIndex
=
7
}
}
}
row
+=
inc
;
if
(
row
<
0
||
this
.
moduleCount
<=
row
)
{
row
-=
inc
;
inc
=
-
inc
;
break
}
}
}
}
}
QRCodeModel
.
PAD0
=
0xEC
QRCodeModel
.
PAD1
=
0x11
QRCodeModel
.
createData
=
function
(
typeNumber
,
errorCorrectLevel
,
dataList
)
{
var
rsBlocks
=
QRRSBlock
.
getRSBlocks
(
typeNumber
,
errorCorrectLevel
);
var
buffer
=
new
QRBitBuffer
();
for
(
var
i
=
0
;
i
<
dataList
.
length
;
i
++
)
{
var
data
=
dataList
[
i
];
buffer
.
put
(
data
.
mode
,
4
);
buffer
.
put
(
data
.
getLength
(),
QRUtil
.
getLengthInBits
(
data
.
mode
,
typeNumber
));
data
.
write
(
buffer
)
}
var
totalDataCount
=
0
;
for
(
var
i
=
0
;
i
<
rsBlocks
.
length
;
i
++
)
{
totalDataCount
+=
rsBlocks
[
i
].
dataCount
}
if
(
buffer
.
getLengthInBits
()
>
totalDataCount
*
8
)
{
throw
new
Error
(
'code length overflow. ('
+
buffer
.
getLengthInBits
()
+
'>'
+
totalDataCount
*
8
+
')'
)
_this
.
writeShort
=
function
(
i
)
{
_this
.
writeByte
(
i
)
_this
.
writeByte
(
i
>>>
8
)
}
if
(
buffer
.
getLengthInBits
()
+
4
<=
totalDataCount
*
8
)
{
buffer
.
put
(
0
,
4
)
}
while
(
buffer
.
getLengthInBits
()
%
8
!=
0
)
{
buffer
.
putBit
(
false
)
}
while
(
true
)
{
if
(
buffer
.
getLengthInBits
()
>=
totalDataCount
*
8
)
{
break
}
buffer
.
put
(
QRCodeModel
.
PAD0
,
8
);
if
(
buffer
.
getLengthInBits
()
>=
totalDataCount
*
8
)
{
break
}
buffer
.
put
(
QRCodeModel
.
PAD1
,
8
)
_this
.
writeBytes
=
function
(
b
,
off
,
len
)
{
off
=
off
||
0
len
=
len
||
b
.
length
for
(
var
i
=
0
;
i
<
len
;
i
+=
1
)
{
_this
.
writeByte
(
b
[
i
+
off
]
)
}
return
QRCodeModel
.
createBytes
(
buffer
,
rsBlocks
)
}
QRCodeModel
.
createBytes
=
function
(
buffer
,
rsBlocks
)
{
var
offset
=
0
;
var
maxDcCount
=
0
;
var
maxEcCount
=
0
;
var
dcdata
=
new
Array
(
rsBlocks
.
length
);
var
ecdata
=
new
Array
(
rsBlocks
.
length
);
for
(
var
r
=
0
;
r
<
rsBlocks
.
length
;
r
++
)
{
var
dcCount
=
rsBlocks
[
r
].
dataCount
;
var
ecCount
=
rsBlocks
[
r
].
totalCount
-
dcCount
;
maxDcCount
=
Math
.
max
(
maxDcCount
,
dcCount
);
maxEcCount
=
Math
.
max
(
maxEcCount
,
ecCount
);
dcdata
[
r
]
=
new
Array
(
dcCount
);
for
(
var
i
=
0
;
i
<
dcdata
[
r
].
length
;
i
++
)
{
dcdata
[
r
][
i
]
=
0xff
&
buffer
.
buffer
[
i
+
offset
]
}
offset
+=
dcCount
;
var
rsPoly
=
QRUtil
.
getErrorCorrectPolynomial
(
ecCount
);
var
rawPoly
=
new
QRPolynomial
(
dcdata
[
r
],
rsPoly
.
getLength
()
-
1
);
var
modPoly
=
rawPoly
.
mod
(
rsPoly
);
ecdata
[
r
]
=
new
Array
(
rsPoly
.
getLength
()
-
1
);
for
(
var
i
=
0
;
i
<
ecdata
[
r
].
length
;
i
++
)
{
var
modIndex
=
i
+
modPoly
.
getLength
()
-
ecdata
[
r
].
length
;
ecdata
[
r
][
i
]
=
(
modIndex
>=
0
)
?
modPoly
.
get
(
modIndex
)
:
0
}
_this
.
writeString
=
function
(
s
)
{
for
(
var
i
=
0
;
i
<
s
.
length
;
i
+=
1
)
{
_this
.
writeByte
(
s
.
charCodeAt
(
i
)
)
}
var
totalCodeCount
=
0
;
for
(
var
i
=
0
;
i
<
rsBlocks
.
length
;
i
++
)
{
totalCodeCount
+=
rsBlocks
[
i
].
totalCount
}
var
data
=
new
Array
(
totalCodeCount
);
var
index
=
0
;
for
(
var
i
=
0
;
i
<
maxDcCount
;
i
++
)
{
for
(
var
r
=
0
;
r
<
rsBlocks
.
length
;
r
++
)
{
if
(
i
<
dcdata
[
r
].
length
)
{
data
[
index
++
]
=
dcdata
[
r
][
i
]
}
}
}
for
(
var
i
=
0
;
i
<
maxEcCount
;
i
++
)
{
for
(
var
r
=
0
;
r
<
rsBlocks
.
length
;
r
++
)
{
if
(
i
<
ecdata
[
r
].
length
)
{
data
[
index
++
]
=
ecdata
[
r
][
i
]
}
}
}
return
data
}
var
QRMode
=
{
MODE_NUMBER
:
1
<<
0
,
MODE_ALPHA_NUM
:
1
<<
1
,
MODE_8BIT_BYTE
:
1
<<
2
,
MODE_KANJI
:
1
<<
3
}
var
QRErrorCorrectLevel
=
{
L
:
1
,
M
:
0
,
Q
:
3
,
H
:
2
}
var
QRMaskPattern
=
{
PATTERN000
:
0
,
PATTERN001
:
1
,
PATTERN010
:
2
,
PATTERN011
:
3
,
PATTERN100
:
4
,
PATTERN101
:
5
,
PATTERN110
:
6
,
PATTERN111
:
7
}
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
<<
10
)
|
(
1
<<
8
)
|
(
1
<<
5
)
|
(
1
<<
4
)
|
(
1
<<
2
)
|
(
1
<<
1
)
|
(
1
<<
0
),
G18
:
(
1
<<
12
)
|
(
1
<<
11
)
|
(
1
<<
10
)
|
(
1
<<
9
)
|
(
1
<<
8
)
|
(
1
<<
5
)
|
(
1
<<
2
)
|
(
1
<<
0
),
G15_MASK
:
(
1
<<
14
)
|
(
1
<<
12
)
|
(
1
<<
10
)
|
(
1
<<
4
)
|
(
1
<<
1
),
getBCHTypeInfo
:
function
(
data
)
{
var
d
=
data
<<
10
;
while
(
QRUtil
.
getBCHDigit
(
d
)
-
QRUtil
.
getBCHDigit
(
QRUtil
.
G15
)
>=
0
)
{
d
^=
(
QRUtil
.
G15
<<
(
QRUtil
.
getBCHDigit
(
d
)
-
QRUtil
.
getBCHDigit
(
QRUtil
.
G15
)))
}
return
((
data
<<
10
)
|
d
)
^
QRUtil
.
G15_MASK
},
getBCHTypeNumber
:
function
(
data
)
{
var
d
=
data
<<
12
;
while
(
QRUtil
.
getBCHDigit
(
d
)
-
QRUtil
.
getBCHDigit
(
QRUtil
.
G18
)
>=
0
)
{
d
^=
(
QRUtil
.
G18
<<
(
QRUtil
.
getBCHDigit
(
d
)
-
QRUtil
.
getBCHDigit
(
QRUtil
.
G18
)))
}
return
(
data
<<
12
)
|
d
},
getBCHDigit
:
function
(
data
)
{
var
digit
=
0
;
while
(
data
!=
0
)
{
digit
++
;
data
>>>=
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
(
Math
.
floor
(
i
/
2
)
+
Math
.
floor
(
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
<
errorCorrectLength
;
i
++
)
{
a
=
a
.
multiply
(
new
QRPolynomial
([
1
,
QRMath
.
gexp
(
i
)],
0
))
}
return
a
},
getLengthInBits
:
function
(
mode
,
type
)
{
if
(
1
<=
type
&&
type
<
10
)
{
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
<
27
)
{
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
<
41
)
{
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
=
qrCode
.
getModuleCount
();
var
lostPoint
=
0
;
for
(
var
row
=
0
;
row
<
moduleCount
;
row
++
)
{
for
(
var
col
=
0
;
col
<
moduleCount
;
col
++
)
{
var
sameCount
=
0
;
var
dark
=
qrCode
.
isDark
(
row
,
col
);
for
(
var
r
=
-
1
;
r
<=
1
;
r
++
)
{
if
(
row
+
r
<
0
||
moduleCount
<=
row
+
r
)
{
continue
}
for
(
var
c
=
-
1
;
c
<=
1
;
c
++
)
{
if
(
col
+
c
<
0
||
moduleCount
<=
col
+
c
)
{
continue
}
if
(
r
==
0
&&
c
==
0
)
{
continue
}
if
(
dark
==
qrCode
.
isDark
(
row
+
r
,
col
+
c
))
{
sameCount
++
}
}
}
if
(
sameCount
>
5
)
{
lostPoint
+=
(
3
+
sameCount
-
5
)
}
}
}
for
(
var
row
=
0
;
row
<
moduleCount
-
1
;
row
++
)
{
for
(
var
col
=
0
;
col
<
moduleCount
-
1
;
col
++
)
{
var
count
=
0
;
if
(
qrCode
.
isDark
(
row
,
col
))
count
++
;
if
(
qrCode
.
isDark
(
row
+
1
,
col
))
count
++
;
if
(
qrCode
.
isDark
(
row
,
col
+
1
))
count
++
;
if
(
qrCode
.
isDark
(
row
+
1
,
col
+
1
))
count
++
;
if
(
count
==
0
||
count
==
4
)
{
lostPoint
+=
3
}
}
}
for
(
var
row
=
0
;
row
<
moduleCount
;
row
++
)
{
for
(
var
col
=
0
;
col
<
moduleCount
-
6
;
col
++
)
{
if
(
qrCode
.
isDark
(
row
,
col
)
&&
!
qrCode
.
isDark
(
row
,
col
+
1
)
&&
qrCode
.
isDark
(
row
,
col
+
2
)
&&
qrCode
.
isDark
(
row
,
col
+
3
)
&&
qrCode
.
isDark
(
row
,
col
+
4
)
&&
!
qrCode
.
isDark
(
row
,
col
+
5
)
&&
qrCode
.
isDark
(
row
,
col
+
6
))
{
lostPoint
+=
40
}
}
}
for
(
var
col
=
0
;
col
<
moduleCount
;
col
++
)
{
for
(
var
row
=
0
;
row
<
moduleCount
-
6
;
row
++
)
{
if
(
qrCode
.
isDark
(
row
,
col
)
&&
!
qrCode
.
isDark
(
row
+
1
,
col
)
&&
qrCode
.
isDark
(
row
+
2
,
col
)
&&
qrCode
.
isDark
(
row
+
3
,
col
)
&&
qrCode
.
isDark
(
row
+
4
,
col
)
&&
!
qrCode
.
isDark
(
row
+
5
,
col
)
&&
qrCode
.
isDark
(
row
+
6
,
col
))
{
lostPoint
+=
40
}
}
}
var
darkCount
=
0
;
for
(
var
col
=
0
;
col
<
moduleCount
;
col
++
)
{
for
(
var
row
=
0
;
row
<
moduleCount
;
row
++
)
{
if
(
qrCode
.
isDark
(
row
,
col
))
{
darkCount
++
}
}
}
var
ratio
=
Math
.
abs
(
100
*
darkCount
/
moduleCount
/
moduleCount
-
50
)
/
5
;
lostPoint
+=
ratio
*
10
;
return
lostPoint
}
}
var
QRMath
=
{
glog
:
function
(
n
)
{
if
(
n
<
1
)
{
throw
new
Error
(
'glog('
+
n
+
')'
)
}
return
QRMath
.
LOG_TABLE
[
n
]
},
gexp
:
function
(
n
)
{
while
(
n
<
0
)
{
n
+=
255
}
while
(
n
>=
256
)
{
n
-=
255
}
return
QRMath
.
EXP_TABLE
[
n
]
},
EXP_TABLE
:
new
Array
(
256
),
LOG_TABLE
:
new
Array
(
256
)
};
for
(
var
i
=
0
;
i
<
8
;
i
++
)
{
QRMath
.
EXP_TABLE
[
i
]
=
1
<<
i
}
for
(
var
i
=
8
;
i
<
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
<
255
;
i
++
)
{
QRMath
.
LOG_TABLE
[
QRMath
.
EXP_TABLE
[
i
]]
=
i
}
function
QRPolynomial
(
num
,
shift
)
{
if
(
num
.
length
==
undefined
)
{
throw
new
Error
(
num
.
length
+
'/'
+
shift
)
}
var
offset
=
0
;
while
(
offset
<
num
.
length
&&
num
[
offset
]
==
0
)
{
offset
++
}
this
.
num
=
new
Array
(
num
.
length
-
offset
+
shift
);
for
(
var
i
=
0
;
i
<
num
.
length
-
offset
;
i
++
)
{
this
.
num
[
i
]
=
num
[
i
+
offset
]
}
}
QRPolynomial
.
prototype
=
{
get
:
function
(
index
)
{
return
this
.
num
[
index
]
},
getLength
:
function
()
{
return
this
.
num
.
length
},
multiply
:
function
(
e
)
{
var
num
=
new
Array
(
this
.
getLength
()
+
e
.
getLength
()
-
1
);
for
(
var
i
=
0
;
i
<
this
.
getLength
();
i
++
)
{
for
(
var
j
=
0
;
j
<
e
.
getLength
();
j
++
)
{
num
[
i
+
j
]
^=
QRMath
.
gexp
(
QRMath
.
glog
(
this
.
get
(
i
))
+
QRMath
.
glog
(
e
.
get
(
j
)))
}
}
return
new
QRPolynomial
(
num
,
0
)
},
mod
:
function
(
e
)
{
if
(
this
.
getLength
()
-
e
.
getLength
()
<
0
)
{
return
this
}
var
ratio
=
QRMath
.
glog
(
this
.
get
(
0
))
-
QRMath
.
glog
(
e
.
get
(
0
));
var
num
=
new
Array
(
this
.
getLength
());
for
(
var
i
=
0
;
i
<
this
.
getLength
();
i
++
)
{
num
[
i
]
=
this
.
get
(
i
)
}
for
(
var
i
=
0
;
i
<
e
.
getLength
();
i
++
)
{
num
[
i
]
^=
QRMath
.
gexp
(
QRMath
.
glog
(
e
.
get
(
i
))
+
ratio
)
}
return
new
QRPolynomial
(
num
,
0
).
mod
(
e
)
}
}
function
QRRSBlock
(
totalCount
,
dataCount
)
{
this
.
totalCount
=
totalCount
;
this
.
dataCount
=
dataCount
}
QRRSBlock
.
RS_BLOCK_TABLE
=
[[
1
,
26
,
19
],
[
1
,
26
,
16
],
[
1
,
26
,
13
],
[
1
,
26
,
9
],
[
1
,
44
,
34
],
[
1
,
44
,
28
],
[
1
,
44
,
22
],
[
1
,
44
,
16
],
[
1
,
70
,
55
],
[
1
,
70
,
44
],
[
2
,
35
,
17
],
[
2
,
35
,
13
],
[
1
,
100
,
80
],
[
2
,
50
,
32
],
[
2
,
50
,
24
],
[
4
,
25
,
9
],
[
1
,
134
,
108
],
[
2
,
67
,
43
],
[
2
,
33
,
15
,
2
,
34
,
16
],
[
2
,
33
,
11
,
2
,
34
,
12
],
[
2
,
86
,
68
],
[
4
,
43
,
27
],
[
4
,
43
,
19
],
[
4
,
43
,
15
],
[
2
,
98
,
78
],
[
4
,
49
,
31
],
[
2
,
32
,
14
,
4
,
33
,
15
],
[
4
,
39
,
13
,
1
,
40
,
14
],
[
2
,
121
,
97
],
[
2
,
60
,
38
,
2
,
61
,
39
],
[
4
,
40
,
18
,
2
,
41
,
19
],
[
4
,
40
,
14
,
2
,
41
,
15
],
[
2
,
146
,
116
],
[
3
,
58
,
36
,
2
,
59
,
37
],
[
4
,
36
,
16
,
4
,
37
,
17
],
[
4
,
36
,
12
,
4
,
37
,
13
],
[
2
,
86
,
68
,
2
,
87
,
69
],
[
4
,
69
,
43
,
1
,
70
,
44
],
[
6
,
43
,
19
,
2
,
44
,
20
],
[
6
,
43
,
15
,
2
,
44
,
16
],
[
4
,
101
,
81
],
[
1
,
80
,
50
,
4
,
81
,
51
],
[
4
,
50
,
22
,
4
,
51
,
23
],
[
3
,
36
,
12
,
8
,
37
,
13
],
[
2
,
116
,
92
,
2
,
117
,
93
],
[
6
,
58
,
36
,
2
,
59
,
37
],
[
4
,
46
,
20
,
6
,
47
,
21
],
[
7
,
42
,
14
,
4
,
43
,
15
],
[
4
,
133
,
107
],
[
8
,
59
,
37
,
1
,
60
,
38
],
[
8
,
44
,
20
,
4
,
45
,
21
],
[
12
,
33
,
11
,
4
,
34
,
12
],
[
3
,
145
,
115
,
1
,
146
,
116
],
[
4
,
64
,
40
,
5
,
65
,
41
],
[
11
,
36
,
16
,
5
,
37
,
17
],
[
11
,
36
,
12
,
5
,
37
,
13
],
[
5
,
109
,
87
,
1
,
110
,
88
],
[
5
,
65
,
41
,
5
,
66
,
42
],
[
5
,
54
,
24
,
7
,
55
,
25
],
[
11
,
36
,
12
],
[
5
,
122
,
98
,
1
,
123
,
99
],
[
7
,
73
,
45
,
3
,
74
,
46
],
[
15
,
43
,
19
,
2
,
44
,
20
],
[
3
,
45
,
15
,
13
,
46
,
16
],
[
1
,
135
,
107
,
5
,
136
,
108
],
[
10
,
74
,
46
,
1
,
75
,
47
],
[
1
,
50
,
22
,
15
,
51
,
23
],
[
2
,
42
,
14
,
17
,
43
,
15
],
[
5
,
150
,
120
,
1
,
151
,
121
],
[
9
,
69
,
43
,
4
,
70
,
44
],
[
17
,
50
,
22
,
1
,
51
,
23
],
[
2
,
42
,
14
,
19
,
43
,
15
],
[
3
,
141
,
113
,
4
,
142
,
114
],
[
3
,
70
,
44
,
11
,
71
,
45
],
[
17
,
47
,
21
,
4
,
48
,
22
],
[
9
,
39
,
13
,
16
,
40
,
14
],
[
3
,
135
,
107
,
5
,
136
,
108
],
[
3
,
67
,
41
,
13
,
68
,
42
],
[
15
,
54
,
24
,
5
,
55
,
25
],
[
15
,
43
,
15
,
10
,
44
,
16
],
[
4
,
144
,
116
,
4
,
145
,
117
],
[
17
,
68
,
42
],
[
17
,
50
,
22
,
6
,
51
,
23
],
[
19
,
46
,
16
,
6
,
47
,
17
],
[
2
,
139
,
111
,
7
,
140
,
112
],
[
17
,
74
,
46
],
[
7
,
54
,
24
,
16
,
55
,
25
],
[
34
,
37
,
13
],
[
4
,
151
,
121
,
5
,
152
,
122
],
[
4
,
75
,
47
,
14
,
76
,
48
],
[
11
,
54
,
24
,
14
,
55
,
25
],
[
16
,
45
,
15
,
14
,
46
,
16
],
[
6
,
147
,
117
,
4
,
148
,
118
],
[
6
,
73
,
45
,
14
,
74
,
46
],
[
11
,
54
,
24
,
16
,
55
,
25
],
[
30
,
46
,
16
,
2
,
47
,
17
],
[
8
,
132
,
106
,
4
,
133
,
107
],
[
8
,
75
,
47
,
13
,
76
,
48
],
[
7
,
54
,
24
,
22
,
55
,
25
],
[
22
,
45
,
15
,
13
,
46
,
16
],
[
10
,
142
,
114
,
2
,
143
,
115
],
[
19
,
74
,
46
,
4
,
75
,
47
],
[
28
,
50
,
22
,
6
,
51
,
23
],
[
33
,
46
,
16
,
4
,
47
,
17
],
[
8
,
152
,
122
,
4
,
153
,
123
],
[
22
,
73
,
45
,
3
,
74
,
46
],
[
8
,
53
,
23
,
26
,
54
,
24
],
[
12
,
45
,
15
,
28
,
46
,
16
],
[
3
,
147
,
117
,
10
,
148
,
118
],
[
3
,
73
,
45
,
23
,
74
,
46
],
[
4
,
54
,
24
,
31
,
55
,
25
],
[
11
,
45
,
15
,
31
,
46
,
16
],
[
7
,
146
,
116
,
7
,
147
,
117
],
[
21
,
73
,
45
,
7
,
74
,
46
],
[
1
,
53
,
23
,
37
,
54
,
24
],
[
19
,
45
,
15
,
26
,
46
,
16
],
[
5
,
145
,
115
,
10
,
146
,
116
],
[
19
,
75
,
47
,
10
,
76
,
48
],
[
15
,
54
,
24
,
25
,
55
,
25
],
[
23
,
45
,
15
,
25
,
46
,
16
],
[
13
,
145
,
115
,
3
,
146
,
116
],
[
2
,
74
,
46
,
29
,
75
,
47
],
[
42
,
54
,
24
,
1
,
55
,
25
],
[
23
,
45
,
15
,
28
,
46
,
16
],
[
17
,
145
,
115
],
[
10
,
74
,
46
,
23
,
75
,
47
],
[
10
,
54
,
24
,
35
,
55
,
25
],
[
19
,
45
,
15
,
35
,
46
,
16
],
[
17
,
145
,
115
,
1
,
146
,
116
],
[
14
,
74
,
46
,
21
,
75
,
47
],
[
29
,
54
,
24
,
19
,
55
,
25
],
[
11
,
45
,
15
,
46
,
46
,
16
],
[
13
,
145
,
115
,
6
,
146
,
116
],
[
14
,
74
,
46
,
23
,
75
,
47
],
[
44
,
54
,
24
,
7
,
55
,
25
],
[
59
,
46
,
16
,
1
,
47
,
17
],
[
12
,
151
,
121
,
7
,
152
,
122
],
[
12
,
75
,
47
,
26
,
76
,
48
],
[
39
,
54
,
24
,
14
,
55
,
25
],
[
22
,
45
,
15
,
41
,
46
,
16
],
[
6
,
151
,
121
,
14
,
152
,
122
],
[
6
,
75
,
47
,
34
,
76
,
48
],
[
46
,
54
,
24
,
10
,
55
,
25
],
[
2
,
45
,
15
,
64
,
46
,
16
],
[
17
,
152
,
122
,
4
,
153
,
123
],
[
29
,
74
,
46
,
14
,
75
,
47
],
[
49
,
54
,
24
,
10
,
55
,
25
],
[
24
,
45
,
15
,
46
,
46
,
16
],
[
4
,
152
,
122
,
18
,
153
,
123
],
[
13
,
74
,
46
,
32
,
75
,
47
],
[
48
,
54
,
24
,
14
,
55
,
25
],
[
42
,
45
,
15
,
32
,
46
,
16
],
[
20
,
147
,
117
,
4
,
148
,
118
],
[
40
,
75
,
47
,
7
,
76
,
48
],
[
43
,
54
,
24
,
22
,
55
,
25
],
[
10
,
45
,
15
,
67
,
46
,
16
],
[
19
,
148
,
118
,
6
,
149
,
119
],
[
18
,
75
,
47
,
31
,
76
,
48
],
[
34
,
54
,
24
,
34
,
55
,
25
],
[
20
,
45
,
15
,
61
,
46
,
16
]]
QRRSBlock
.
getRSBlocks
=
function
(
typeNumber
,
errorCorrectLevel
)
{
var
rsBlock
=
QRRSBlock
.
getRsBlockTable
(
typeNumber
,
errorCorrectLevel
);
if
(
rsBlock
==
undefined
)
{
throw
new
Error
(
'bad rs block @ typeNumber:'
+
typeNumber
+
'/errorCorrectLevel:'
+
errorCorrectLevel
)
}
var
length
=
rsBlock
.
length
/
3
;
var
list
=
[];
for
(
var
i
=
0
;
i
<
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
<
count
;
j
++
)
{
list
.
push
(
new
QRRSBlock
(
totalCount
,
dataCount
))
}
}
return
list
_this
.
toByteArray
=
function
()
{
return
_bytes
}
_this
.
toString
=
function
()
{
var
s
=
''
s
+=
'['
for
(
var
i
=
0
;
i
<
_bytes
.
length
;
i
+=
1
)
{
if
(
i
>
0
)
{
s
+=
','
}
s
+=
_bytes
[
i
]
}
s
+=
']'
return
s
}
return
_this
}
//---------------------------------------------------------------------
// base64EncodeOutputStream
//---------------------------------------------------------------------
var
base64EncodeOutputStream
=
function
()
{
var
_buffer
=
0
var
_buflen
=
0
var
_length
=
0
var
_base64
=
''
var
_this
=
{}
var
writeEncoded
=
function
(
b
)
{
_base64
+=
String
.
fromCharCode
(
encode
(
b
&
0x3f
)
)
}
var
encode
=
function
(
n
)
{
if
(
n
<
0
)
{
// error.
}
else
if
(
n
<
26
)
{
return
0x41
+
n
}
else
if
(
n
<
52
)
{
return
0x61
+
(
n
-
26
)
}
else
if
(
n
<
62
)
{
return
0x30
+
(
n
-
52
)
}
else
if
(
n
==
62
)
{
return
0x2b
}
else
if
(
n
==
63
)
{
return
0x2f
}
throw
new
Error
(
'n:'
+
n
)
}
_this
.
writeByte
=
function
(
n
)
{
_buffer
=
(
_buffer
<<
8
)
|
(
n
&
0xff
)
_buflen
+=
8
_length
+=
1
while
(
_buflen
>=
6
)
{
writeEncoded
(
_buffer
>>>
(
_buflen
-
6
)
)
_buflen
-=
6
}
}
_this
.
flush
=
function
()
{
if
(
_buflen
>
0
)
{
writeEncoded
(
_buffer
<<
(
6
-
_buflen
)
)
_buffer
=
0
_buflen
=
0
}
if
(
_length
%
3
!=
0
)
{
// padding
var
padlen
=
3
-
_length
%
3
for
(
var
i
=
0
;
i
<
padlen
;
i
+=
1
)
{
_base64
+=
'='
}
}
}
_this
.
toString
=
function
()
{
return
_base64
}
return
_this
}
//---------------------------------------------------------------------
// base64DecodeInputStream
//---------------------------------------------------------------------
var
base64DecodeInputStream
=
function
(
str
)
{
var
_str
=
str
var
_pos
=
0
var
_buffer
=
0
var
_buflen
=
0
var
_this
=
{}
_this
.
read
=
function
()
{
while
(
_buflen
<
8
)
{
if
(
_pos
>=
_str
.
length
)
{
if
(
_buflen
==
0
)
{
return
-
1
}
throw
new
Error
(
'unexpected end of file./'
+
_buflen
)
}
var
c
=
_str
.
charAt
(
_pos
)
_pos
+=
1
if
(
c
==
'='
)
{
_buflen
=
0
return
-
1
}
else
if
(
c
.
match
(
/^
\s
$/
)
)
{
// ignore if whitespace.
continue
}
_buffer
=
(
_buffer
<<
6
)
|
decode
(
c
.
charCodeAt
(
0
)
)
_buflen
+=
6
}
var
n
=
(
_buffer
>>>
(
_buflen
-
8
)
)
&
0xff
_buflen
-=
8
return
n
}
var
decode
=
function
(
c
)
{
if
(
0x41
<=
c
&&
c
<=
0x5a
)
{
return
c
-
0x41
}
else
if
(
0x61
<=
c
&&
c
<=
0x7a
)
{
return
c
-
0x61
+
26
}
else
if
(
0x30
<=
c
&&
c
<=
0x39
)
{
return
c
-
0x30
+
52
}
else
if
(
c
==
0x2b
)
{
return
62
}
else
if
(
c
==
0x2f
)
{
return
63
}
else
{
throw
new
Error
(
'c:'
+
c
)
}
}
return
_this
}
//---------------------------------------------------------------------
// gifImage (B/W)
//---------------------------------------------------------------------
var
gifImage
=
function
(
width
,
height
)
{
var
_width
=
width
var
_height
=
height
var
_data
=
new
Array
(
width
*
height
)
var
_this
=
{}
_this
.
setPixel
=
function
(
x
,
y
,
pixel
)
{
_data
[
y
*
_width
+
x
]
=
pixel
}
_this
.
write
=
function
(
out
)
{
//---------------------------------
// GIF Signature
out
.
writeString
(
'GIF87a'
)
//---------------------------------
// Screen Descriptor
out
.
writeShort
(
_width
)
out
.
writeShort
(
_height
)
out
.
writeByte
(
0x80
)
// 2bit
out
.
writeByte
(
0
)
out
.
writeByte
(
0
)
//---------------------------------
// Global Color Map
// black
out
.
writeByte
(
0x00
)
out
.
writeByte
(
0x00
)
out
.
writeByte
(
0x00
)
// white
out
.
writeByte
(
0xff
)
out
.
writeByte
(
0xff
)
out
.
writeByte
(
0xff
)
//---------------------------------
// Image Descriptor
out
.
writeString
(
','
)
out
.
writeShort
(
0
)
out
.
writeShort
(
0
)
out
.
writeShort
(
_width
)
out
.
writeShort
(
_height
)
out
.
writeByte
(
0
)
//---------------------------------
// Local Color Map
//---------------------------------
// Raster Data
var
lzwMinCodeSize
=
2
var
raster
=
getLZWRaster
(
lzwMinCodeSize
)
out
.
writeByte
(
lzwMinCodeSize
)
var
offset
=
0
while
(
raster
.
length
-
offset
>
255
)
{
out
.
writeByte
(
255
)
out
.
writeBytes
(
raster
,
offset
,
255
)
offset
+=
255
}
out
.
writeByte
(
raster
.
length
-
offset
)
out
.
writeBytes
(
raster
,
offset
,
raster
.
length
-
offset
)
out
.
writeByte
(
0x00
)
//---------------------------------
// GIF Terminator
out
.
writeString
(
';'
)
}
var
bitOutputStream
=
function
(
out
)
{
var
_out
=
out
var
_bitLength
=
0
var
_bitBuffer
=
0
var
_this
=
{}
_this
.
write
=
function
(
data
,
length
)
{
if
(
(
data
>>>
length
)
!=
0
)
{
throw
new
Error
(
'length over'
)
}
while
(
_bitLength
+
length
>=
8
)
{
_out
.
writeByte
(
0xff
&
(
(
data
<<
_bitLength
)
|
_bitBuffer
)
)
length
-=
(
8
-
_bitLength
)
data
>>>=
(
8
-
_bitLength
)
_bitBuffer
=
0
_bitLength
=
0
}
_bitBuffer
=
(
data
<<
_bitLength
)
|
_bitBuffer
_bitLength
=
_bitLength
+
length
}
_this
.
flush
=
function
()
{
if
(
_bitLength
>
0
)
{
_out
.
writeByte
(
_bitBuffer
)
}
}
return
_this
}
var
getLZWRaster
=
function
(
lzwMinCodeSize
)
{
var
clearCode
=
1
<<
lzwMinCodeSize
var
endCode
=
(
1
<<
lzwMinCodeSize
)
+
1
var
bitLength
=
lzwMinCodeSize
+
1
// Setup LZWTable
var
table
=
lzwTable
()
for
(
var
i
=
0
;
i
<
clearCode
;
i
+=
1
)
{
table
.
add
(
String
.
fromCharCode
(
i
)
)
}
table
.
add
(
String
.
fromCharCode
(
clearCode
)
)
table
.
add
(
String
.
fromCharCode
(
endCode
)
)
var
byteOut
=
byteArrayOutputStream
()
var
bitOut
=
bitOutputStream
(
byteOut
)
// clear code
bitOut
.
write
(
clearCode
,
bitLength
)
var
dataIndex
=
0
var
s
=
String
.
fromCharCode
(
_data
[
dataIndex
])
dataIndex
+=
1
while
(
dataIndex
<
_data
.
length
)
{
var
c
=
String
.
fromCharCode
(
_data
[
dataIndex
])
dataIndex
+=
1
if
(
table
.
contains
(
s
+
c
)
)
{
s
=
s
+
c
}
else
{
bitOut
.
write
(
table
.
indexOf
(
s
),
bitLength
)
if
(
table
.
size
()
<
0xfff
)
{
if
(
table
.
size
()
==
(
1
<<
bitLength
)
)
{
bitLength
+=
1
}
table
.
add
(
s
+
c
)
}
s
=
c
}
QRRSBlock
.
getRsBlockTable
=
function
(
typeNumber
,
errorCorrectLevel
)
{
switch
(
errorCorrectLevel
)
{
case
QRErrorCorrectLevel
.
L
:
return
QRRSBlock
.
RS_BLOCK_TABLE
[(
typeNumber
-
1
)
*
4
+
0
];
case
QRErrorCorrectLevel
.
M
:
return
QRRSBlock
.
RS_BLOCK_TABLE
[(
typeNumber
-
1
)
*
4
+
1
];
case
QRErrorCorrectLevel
.
Q
:
return
QRRSBlock
.
RS_BLOCK_TABLE
[(
typeNumber
-
1
)
*
4
+
2
];
case
QRErrorCorrectLevel
.
H
:
return
QRRSBlock
.
RS_BLOCK_TABLE
[(
typeNumber
-
1
)
*
4
+
3
];
default
:
return
undefined
}
}
function
QRBitBuffer
()
{
this
.
buffer
=
[];
this
.
length
=
0
}
QRBitBuffer
.
prototype
=
{
get
:
function
(
index
)
{
var
bufIndex
=
Math
.
floor
(
index
/
8
);
return
((
this
.
buffer
[
bufIndex
]
>>>
(
7
-
index
%
8
))
&
1
)
==
1
},
put
:
function
(
num
,
length
)
{
for
(
var
i
=
0
;
i
<
length
;
i
++
)
{
this
.
putBit
(((
num
>>>
(
length
-
i
-
1
))
&
1
)
==
1
)
}
},
getLengthInBits
:
function
()
{
return
this
.
length
},
putBit
:
function
(
bit
)
{
var
bufIndex
=
Math
.
floor
(
this
.
length
/
8
);
if
(
this
.
buffer
.
length
<=
bufIndex
)
{
this
.
buffer
.
push
(
0
)
}
if
(
bit
)
{
this
.
buffer
[
bufIndex
]
|=
(
0x80
>>>
(
this
.
length
%
8
))
}
this
.
length
++
}
}
var
QRCodeLimitLength
=
[[
17
,
14
,
11
,
7
],
[
32
,
26
,
20
,
14
],
[
53
,
42
,
32
,
24
],
[
78
,
62
,
46
,
34
],
[
106
,
84
,
60
,
44
],
[
134
,
106
,
74
,
58
],
[
154
,
122
,
86
,
64
],
[
192
,
152
,
108
,
84
],
[
230
,
180
,
130
,
98
],
[
271
,
213
,
151
,
119
],
[
321
,
251
,
177
,
137
],
[
367
,
287
,
203
,
155
],
[
425
,
331
,
241
,
177
],
[
458
,
362
,
258
,
194
],
[
520
,
412
,
292
,
220
],
[
586
,
450
,
322
,
250
],
[
644
,
504
,
364
,
280
],
[
718
,
560
,
394
,
310
],
[
792
,
624
,
442
,
338
],
[
858
,
666
,
482
,
382
],
[
929
,
711
,
509
,
403
],
[
1003
,
779
,
565
,
439
],
[
1091
,
857
,
611
,
461
],
[
1171
,
911
,
661
,
511
],
[
1273
,
997
,
715
,
535
],
[
1367
,
1059
,
751
,
593
],
[
1465
,
1125
,
805
,
625
],
[
1528
,
1190
,
868
,
658
],
[
1628
,
1264
,
908
,
698
],
[
1732
,
1370
,
982
,
742
],
[
1840
,
1452
,
1030
,
790
],
[
1952
,
1538
,
1112
,
842
],
[
2068
,
1628
,
1168
,
898
],
[
2188
,
1722
,
1228
,
958
],
[
2303
,
1809
,
1283
,
983
],
[
2431
,
1911
,
1351
,
1051
],
[
2563
,
1989
,
1423
,
1093
],
[
2699
,
2099
,
1499
,
1139
],
[
2809
,
2213
,
1579
,
1219
],
[
2953
,
2331
,
1663
,
1273
]]
// QRCode object
QRCode
=
function
(
canvasId
,
vOption
)
{
this
.
_htOption
=
{
width
:
256
,
height
:
256
,
typeNumber
:
4
,
colorDark
:
'#000000'
,
colorLight
:
'#ffffff'
,
correctLevel
:
QRErrorCorrectLevel
.
H
}
if
(
typeof
vOption
===
'string'
)
{
vOption
=
{
text
:
vOption
}
}
// Overwrites options
if
(
vOption
)
{
for
(
var
i
in
vOption
)
{
this
.
_htOption
[
i
]
=
vOption
[
i
]
}
}
this
.
_oQRCode
=
null
this
.
canvasId
=
canvasId
if
(
this
.
_htOption
.
text
&&
this
.
canvasId
)
{
this
.
makeCode
(
this
.
_htOption
.
text
)
}
}
QRCode
.
prototype
.
makeCode
=
function
(
sText
)
{
this
.
_oQRCode
=
new
QRCodeModel
(
_getTypeNumber
(
sText
,
this
.
_htOption
.
correctLevel
),
this
.
_htOption
.
correctLevel
)
this
.
_oQRCode
.
addData
(
sText
)
this
.
_oQRCode
.
make
()
this
.
makeImage
()
}
QRCode
.
prototype
.
makeImage
=
function
()
{
var
_oContext
if
(
this
.
_htOption
.
usingIn
)
{
_oContext
=
uni
.
createCanvasContext
(
this
.
canvasId
,
this
.
_htOption
.
usingIn
)
}
else
{
_oContext
=
uni
.
createCanvasContext
(
this
.
canvasId
)
}
var
_htOption
=
this
.
_htOption
var
oQRCode
=
this
.
_oQRCode
var
nCount
=
oQRCode
.
getModuleCount
()
var
nWidth
=
_htOption
.
padding
?
(
_htOption
.
width
-
2
*
_htOption
.
padding
)
/
nCount
:
_htOption
.
width
/
nCount
var
nHeight
=
_htOption
.
padding
?
(
_htOption
.
height
-
2
*
_htOption
.
padding
)
/
nCount
:
_htOption
.
height
/
nCount
var
nRoundedHeight
=
Math
.
round
(
nHeight
)
var
nRoundedWidth
=
Math
.
round
(
nWidth
)
if
(
_htOption
.
image
&&
_htOption
.
image
!=
''
)
{
_oContext
.
drawImage
(
_htOption
.
image
,
0
,
0
,
_htOption
.
width
,
_htOption
.
height
)
}
_oContext
.
setFillStyle
(
'#fff'
)
_oContext
.
fillRect
(
0
,
0
,
_htOption
.
width
,
_htOption
.
height
)
_oContext
.
save
()
for
(
var
row
=
0
;
row
<
nCount
;
row
++
)
{
for
(
var
col
=
0
;
col
<
nCount
;
col
++
)
{
var
bIsDark
=
oQRCode
.
isDark
(
row
,
col
)
var
nLeft
=
_htOption
.
padding
?
col
*
nWidth
+
_htOption
.
padding
:
col
*
nWidth
var
nTop
=
_htOption
.
padding
?
row
*
nHeight
+
_htOption
.
padding
:
row
*
nHeight
_oContext
.
setStrokeStyle
(
bIsDark
?
_htOption
.
colorDark
:
_htOption
.
colorLight
)
// _oContext.setStrokeStyle('red')
_oContext
.
setLineWidth
(
1
)
_oContext
.
setFillStyle
(
bIsDark
?
_htOption
.
colorDark
:
_htOption
.
colorLight
)
// _oContext.setFillStyle('red')
// if (bIsDark) {
_oContext
.
fillRect
(
nLeft
,
nTop
,
nWidth
,
nHeight
)
// }
// 안티 앨리어싱 방지 처리
// if (bIsDark) {
_oContext
.
strokeRect
(
Math
.
floor
(
nLeft
)
+
0.5
,
Math
.
floor
(
nTop
)
+
0.5
,
nRoundedHeight
)
_oContext
.
strokeRect
(
Math
.
ceil
(
nLeft
)
-
0.5
,
Math
.
ceil
(
nTop
)
-
0.5
,
nRoundedWidth
,
nRoundedHeight
)
// }
// _oContext.fillRect(
// Math.floor(nLeft) + 0.5,
// Math.floor(nTop) + 0.5,
// nRoundedWidth,
// nRoundedHeight
// );
// _oContext.fillRect(
// Math.ceil(nLeft) - 0.5,
// Math.ceil(nTop) - 0.5,
// nRoundedWidth,
// nRoundedHeight
// );
// _oContext.clearRect(
// Math.floor(nLeft) + 0.5,
// Math.floor(nTop) + 0.5,
// nRoundedWidth,
// nRoundedHeight
// );
// _oContext.clearRect(
// Math.ceil(nLeft) - 0.5,
// Math.ceil(nTop) - 0.5,
// nRoundedWidth,
// nRoundedHeight
// );
}
}
_oContext
.
draw
(
false
,
()
=>
{
setTimeout
(()
=>
{
this
.
exportImage
()
},
800
)
})
}
// 保存为图片,将临时路径传给回调
QRCode
.
prototype
.
exportImage
=
function
(
callback
)
{
if
(
this
.
_htOption
.
callback
&&
typeof
this
.
_htOption
.
callback
===
'function'
)
{
uni
.
canvasToTempFilePath
({
x
:
0
,
y
:
0
,
width
:
this
.
_htOption
.
width
,
height
:
this
.
_htOption
.
height
,
destWidth
:
this
.
_htOption
.
width
,
destHeight
:
this
.
_htOption
.
height
,
canvasId
:
this
.
canvasId
,
success
:
(
res
)
=>
{
this
.
_htOption
.
callback
({
path
:
res
.
tempFilePath
})
bitOut
.
write
(
table
.
indexOf
(
s
),
bitLength
)
// end code
bitOut
.
write
(
endCode
,
bitLength
)
bitOut
.
flush
()
return
byteOut
.
toByteArray
()
}
var
lzwTable
=
function
()
{
var
_map
=
{}
var
_size
=
0
var
_this
=
{}
_this
.
add
=
function
(
key
)
{
if
(
_this
.
contains
(
key
)
)
{
throw
new
Error
(
'dup key:'
+
key
)
}
_map
[
key
]
=
_size
_size
+=
1
}
_this
.
size
=
function
()
{
return
_size
}
_this
.
indexOf
=
function
(
key
)
{
return
_map
[
key
]
}
_this
.
contains
=
function
(
key
)
{
return
typeof
_map
[
key
]
!=
'undefined'
}
return
_this
}
return
_this
}
var
createImgTag
=
function
(
width
,
height
,
getPixel
,
alt
)
{
var
gif
=
gifImage
(
width
,
height
)
for
(
var
y
=
0
;
y
<
height
;
y
+=
1
)
{
for
(
var
x
=
0
;
x
<
width
;
x
+=
1
)
{
gif
.
setPixel
(
x
,
y
,
getPixel
(
x
,
y
)
)
}
}
var
b
=
byteArrayOutputStream
()
gif
.
write
(
b
)
var
base64
=
base64EncodeOutputStream
()
var
bytes
=
b
.
toByteArray
()
for
(
var
i
=
0
;
i
<
bytes
.
length
;
i
+=
1
)
{
base64
.
writeByte
(
bytes
[
i
])
}
base64
.
flush
()
var
img
=
''
img
+=
'data:image/gif;base64,'
img
+=
base64
return
img
}
//---------------------------------------------------------------------
// returns qrcode function.
var
drawImg
=
function
(
text
,
options
)
{
options
=
options
||
{}
var
typeNumber
=
options
.
typeNumber
||
4
var
errorCorrectLevel
=
options
.
errorCorrectLevel
||
'M'
var
size
=
options
.
size
||
500
var
qr
try
{
qr
=
qrcode
(
typeNumber
,
errorCorrectLevel
||
'M'
)
qr
.
addData
(
text
)
qr
.
make
()
}
catch
(
e
)
{
if
(
typeNumber
>=
40
)
{
throw
new
Error
(
'Text too long to encode'
)
}
else
{
return
drawImg
(
text
,
{
size
:
size
,
errorCorrectLevel
:
errorCorrectLevel
,
typeNumber
:
typeNumber
+
1
})
}
}
QRCode
.
CorrectLevel
=
QRErrorCorrectLevel
})()
// calc cellsize and margin
var
cellsize
=
parseInt
(
size
/
qr
.
getModuleCount
())
var
margin
=
parseInt
((
size
-
qr
.
getModuleCount
()
*
cellsize
)
/
2
)
module
.
exports
=
QRCode
return
qr
.
createImgTag
(
cellsize
,
margin
,
size
)
}
module
.
exports
=
{
drawImg
:
drawImg
}
\ No newline at end of file
pages/my/order/electronicTicket/electronicTicket-副本.vue
View file @
869ba920
...
...
@@ -47,9 +47,7 @@
</view>
<view
class=
"certificate-box"
v-else-if=
"orderInfo.exchangeMode==1||orderInfo.exchangeMode==4||orderInfo.exchangeMode==5"
>
<view
class=
"box-verificationCode"
>
验证码:
{{
ticketCode
}}
</view>
<!--
<uqrcode
ref=
"uqrcode"
canvas-id=
"qrcode"
size=
"200"
class=
"box-QRcode"
:value=
"uqrcodeVal"
:options=
"
{ margin: 10 }" >
</uqrcode>
-->
<!--后端生成-->
<!--
<image
:src=
"imgUrlList"
style=
"width: 180px;height: 180px;margin: 0 auto;display: block;"
v-if=
"imgUrlListType"
></image>
-->
<canvas
class=
"box-QRcode"
canvas-id=
"qrcode"
/>
<view
class=
"progress-box"
v-if=
"qrCodeType==true"
>
<progress
:percent=
"percentage"
activeColor=
"#3688FF"
stroke-width=
"3"
/>
</view>
...
...
@@ -142,7 +140,7 @@
</view>
<view
class=
"rowNumber-list rowNumber-list2"
v-if=
"item.config.paPassedNumEnable==1"
>
<view
class=
"rowNumber-signOver"
>
我的排号:
</view>
<view
class=
"list-value"
>
{{
item
.
sortNo
}}
<text
style=
"font-size: 28rpx;margin-left: 8rpx;line-height: 56rpx;"
>
(
{{
item
.
projectName
}}
)
</text></view>
<view
class=
"list-value"
>
{{
item
.
sortNo
}}
<text
style=
"font-size: 28rpx;margin-left: 8rpx;line-height: 56rpx;
flex-shrink:0;
"
>
(
{{
item
.
projectName
}}
)
</text></view>
</view>
<view
class=
"rowNumber-list rowNumber-list2"
v-if=
"item.config.paPassedNumEnable==1"
>
<view
class=
"rowNumber-signOver"
>
您排队号已过
</view>
...
...
@@ -345,7 +343,7 @@
</template>
<
script
>
import
uQRCode
from
'@/common/
uqrcode4
.js'
import
uQRCode
from
'@/common/
js/uqrcode
.js'
import
UMask
from
'@/uview-ui/components/u-mask/u-mask.vue'
export
default
{
components
:
{
...
...
@@ -509,7 +507,6 @@ export default {
},
data
()
{
return
{
uqrcodeVal
:
''
,
orderDataType
:
false
,
openId
:
''
,
//用户信息
id
:
''
,
//订单ID
...
...
@@ -547,8 +544,6 @@ export default {
photoType
:
false
,
//是否显示优惠券
claimStatus
:
1
,
//领取状态 0未领取 1已领取
findCouponPhoto
:{},
//相册优惠券
imgUrlList
:
''
,
imgUrlListType
:
false
,
}
},
onShow
()
{
...
...
@@ -585,7 +580,7 @@ export default {
this
.
ifyukuaiCode
=
option
.
ifyukuaiCode
||
''
//this.id = "z00167956572219584dc15634b62cf75"
this
.
openId
=
uni
.
getStorageSync
(
'openid'
)
//openid oroHZ5FaUQ_SOOC_uQQP92fJpBRE oh2UV1lyYABHMZ1rMlgjhVHyyYDQ
this
.
openId
=
'oh2UV1lyYABHMZ1rMlgjhVHyyYDQ'
//
this.openId = 'oh2UV1lyYABHMZ1rMlgjhVHyyYDQ'
this
.
getDetail
()
},
onUnload
()
{
...
...
@@ -848,22 +843,17 @@ export default {
}
else
{
verifyCode
=
this
.
verifyCode
}
// uQRCode.make({
// canvasId: 'qrcode',
// componentInstance: this,
// text: verifyCode,
// size: 180,
// margin: 10,
// backgroundColor: '#ffffff',
// foregroundColor: '#000000',
// fileType: 'jpg',
// errorCorrectLevel: uQRCode.errorCorrectLevel.H
// })
// this.uqrcodeVal=verifyCode
//后端生成
// var verifyCodeURL = encodeURI(verifyCode)
// this.imgUrlList = 'http://pay.tuyoyoo.com/distribution/c/'+verifyCodeURL+'?width=180&height=180&frontColor=0&backColor=16777215'
// this.imgUrlListType = true
uQRCode
.
make
({
canvasId
:
'qrcode'
,
componentInstance
:
this
,
text
:
verifyCode
,
size
:
180
,
margin
:
10
,
backgroundColor
:
'#ffffff'
,
foregroundColor
:
'#000000'
,
fileType
:
'jpg'
,
errorCorrectLevel
:
uQRCode
.
errorCorrectLevel
.
H
})
}
},
signOverFun
(
item
){
//过号遮罩显示
...
...
@@ -904,23 +894,17 @@ export default {
// height: 180,
// text:this.codeNo
// })
// uQRCode.make({
// canvasId: 'qrcode',
// componentInstance: this,
// text: this.codeNo,
// size: 180,
// margin: 10,
// backgroundColor: '#ffffff',
// foregroundColor: '#000000',
// fileType: 'jpg',
// errorCorrectLevel: uQRCode.errorCorrectLevel.H
// })
// this.uqrcodeVal=this.codeNo
//后端生成
// this.imgUrlListType = false
// var verifyCodeURL = 'http://pay.tuyoyoo.com/distribution/c/'+this.codeNo+'?width=180&height=180&frontColor=0&backColor=16777215'
// this.imgUrlList = encodeURI(verifyCodeURL)
// this.imgUrlListType = true
uQRCode
.
make
({
canvasId
:
'qrcode'
,
componentInstance
:
this
,
text
:
this
.
codeNo
,
size
:
180
,
margin
:
10
,
backgroundColor
:
'#ffffff'
,
foregroundColor
:
'#000000'
,
fileType
:
'jpg'
,
errorCorrectLevel
:
uQRCode
.
errorCorrectLevel
.
H
})
}
this
.
percentage
+=
1
if
(
this
.
percentage
>=
100
){
...
...
@@ -1316,6 +1300,7 @@ export default {
line-height
:
56rpx
;
font-weight
:
bold
;
margin-right
:
40rpx
;
flex-shrink
:
0
;
}
.order-queueUp
.queueUp-rowNumber3
.rowNumber-list
.list-value
,
.order-queueUp
.queueUp-rowNumber3
.rowNumber-list
.list-value2
,
...
...
@@ -1323,6 +1308,9 @@ export default {
.order-queueUp
.queueUp-rowNumber3
.rowNumber-list
.list-value3
{
color
:
#fff
;
}
.order-queueUp
.queueUp-rowNumber3
.rowNumber-list
.list-value
{
flex-shrink
:
0
;
}
.order-queueUp
.queueUp-rowNumber3
.rowNumber-takeNum
,
.order-queueUp
.queueUp-rowNumber3
.rowNumber-takeNum2
{
background-color
:
#fff
;
...
...
@@ -1344,8 +1332,8 @@ export default {
.order-certificate
.certificate-box
.box-QRcode
{
display
:
block
;
width
:
20
0px
;
height
:
20
0px
;
width
:
18
0px
;
height
:
18
0px
;
margin
:
0
auto
;
}
.order-certificate
.certificate-box
.box-QRcode2
{
...
...
pages/my/order/electronicTicket/electronicTicket.vue
View file @
869ba920
...
...
@@ -47,7 +47,11 @@
</view>
<view
class=
"certificate-box"
v-else-if=
"orderInfo.exchangeMode==1||orderInfo.exchangeMode==4||orderInfo.exchangeMode==5"
>
<view
class=
"box-verificationCode"
>
验证码:
{{
ticketCode
}}
</view>
<canvas
class=
"box-QRcode"
canvas-id=
"qrcode"
/>
<!--
<uqrcode
ref=
"uqrcode"
canvas-id=
"qrcode"
size=
"200"
class=
"box-QRcode"
:value=
"uqrcodeVal"
:options=
"
{ margin: 10 }" >
</uqrcode>
-->
<!--后端生成-->
<!--
<image
:src=
"imgUrlList"
style=
"width: 180px;height: 180px;margin: 0 auto;display: block;"
v-if=
"imgUrlListType"
></image>
-->
<!--显示图片用的标签-->
<image
class=
"code_view"
:src=
"imagePath"
v-if=
"imgTypeShow"
></image>
<view
class=
"progress-box"
v-if=
"qrCodeType==true"
>
<progress
:percent=
"percentage"
activeColor=
"#3688FF"
stroke-width=
"3"
/>
</view>
...
...
@@ -140,7 +144,7 @@
</view>
<view
class=
"rowNumber-list rowNumber-list2"
v-if=
"item.config.paPassedNumEnable==1"
>
<view
class=
"rowNumber-signOver"
>
我的排号:
</view>
<view
class=
"list-value"
>
{{
item
.
sortNo
}}
<text
style=
"font-size: 28rpx;margin-left: 8rpx;line-height: 56rpx;flex-shrink:0;"
>
(
{{
item
.
projectName
}}
)
</text></view>
<view
class=
"list-value"
>
{{
item
.
sortNo
}}
<text
style=
"font-size: 28rpx;margin-left: 8rpx;line-height: 56rpx;flex-shrink:
0;"
>
(
{{
item
.
projectName
}}
)
</text></view>
</view>
<view
class=
"rowNumber-list rowNumber-list2"
v-if=
"item.config.paPassedNumEnable==1"
>
<view
class=
"rowNumber-signOver"
>
您排队号已过
</view>
...
...
@@ -343,7 +347,8 @@
</template>
<
script
>
import
uQRCode
from
'@/common/js/uqrcode.js'
// import uQRCode from '@/common/uqrcode4.js'
import
QRCode
from
'@/common/weapp-qrcode.js'
import
UMask
from
'@/uview-ui/components/u-mask/u-mask.vue'
export
default
{
components
:
{
...
...
@@ -507,6 +512,7 @@ export default {
},
data
()
{
return
{
uqrcodeVal
:
''
,
orderDataType
:
false
,
openId
:
''
,
//用户信息
id
:
''
,
//订单ID
...
...
@@ -544,6 +550,10 @@ export default {
photoType
:
false
,
//是否显示优惠券
claimStatus
:
1
,
//领取状态 0未领取 1已领取
findCouponPhoto
:{},
//相册优惠券
imgUrlList
:
''
,
imgUrlListType
:
false
,
imagePath
:
''
,
//图片接受地址
imgTypeShow
:
true
,
//是否展示图片
}
},
onShow
()
{
...
...
@@ -843,19 +853,36 @@ export default {
}
else
{
verifyCode
=
this
.
verifyCode
}
uQRCode
.
make
({
canvasId
:
'qrcode'
,
componentInstance
:
this
,
text
:
verifyCode
,
size
:
180
,
margin
:
10
,
backgroundColor
:
'#ffffff'
,
foregroundColor
:
'#000000'
,
fileType
:
'jpg'
,
errorCorrectLevel
:
uQRCode
.
errorCorrectLevel
.
H
})
// uQRCode.make({
// canvasId: 'qrcode',
// componentInstance: this,
// text: verifyCode,
// size: 180,
// margin: 10,
// backgroundColor: '#ffffff',
// foregroundColor: '#000000',
// fileType: 'jpg',
// errorCorrectLevel: uQRCode.errorCorrectLevel.H
// })
// this.uqrcodeVal=verifyCode
//后端生成
// var verifyCodeURL = encodeURI(verifyCode)
// this.imgUrlList = 'http://pay.tuyoyoo.com/distribution/c/'+verifyCodeURL+'?width=180&height=180&frontColor=0&backColor=16777215'
// this.imgUrlListType = true
this
.
createCode
(
verifyCode
)
}
},
createCode
(
showCode
)
{
//创建二维码
var
imgData
=
QRCode
.
drawImg
(
showCode
,
{
typeNumber
:
3
,
//码点大小 1-40,数字越大,码点越小,二维码会显得越密集
errorCorrectLevel
:
'H'
,
//纠错等级 H等级最高(30%) 简单来说,就是二维码被覆盖了多少仍然能被识别出来 详见qrcode.js
size
:
180
})
console
.
log
(
imgData
)
this
.
imgTypeShow
=
false
this
.
imagePath
=
imgData
this
.
imgTypeShow
=
true
},
signOverFun
(
item
){
//过号遮罩显示
this
.
overSignedData
=
{}
this
.
overSignedData
=
item
...
...
@@ -894,17 +921,24 @@ export default {
// height: 180,
// text:this.codeNo
// })
uQRCode
.
make
({
canvasId
:
'qrcode'
,
componentInstance
:
this
,
text
:
this
.
codeNo
,
size
:
180
,
margin
:
10
,
backgroundColor
:
'#ffffff'
,
foregroundColor
:
'#000000'
,
fileType
:
'jpg'
,
errorCorrectLevel
:
uQRCode
.
errorCorrectLevel
.
H
})
// uQRCode.make({
// canvasId: 'qrcode',
// componentInstance: this,
// text: this.codeNo,
// size: 180,
// margin: 10,
// backgroundColor: '#ffffff',
// foregroundColor: '#000000',
// fileType: 'jpg',
// errorCorrectLevel: uQRCode.errorCorrectLevel.H
// })
// this.uqrcodeVal=this.codeNo
//后端生成
// this.imgUrlListType = false
// var verifyCodeURL = 'http://pay.tuyoyoo.com/distribution/c/'+this.codeNo+'?width=180&height=180&frontColor=0&backColor=16777215'
// this.imgUrlList = encodeURI(verifyCodeURL)
// this.imgUrlListType = true
this
.
createCode
(
this
.
codeNo
)
}
this
.
percentage
+=
1
if
(
this
.
percentage
>=
100
){
...
...
@@ -1300,7 +1334,6 @@ export default {
line-height
:
56rpx
;
font-weight
:
bold
;
margin-right
:
40rpx
;
flex-shrink
:
0
;
}
.order-queueUp
.queueUp-rowNumber3
.rowNumber-list
.list-value
,
.order-queueUp
.queueUp-rowNumber3
.rowNumber-list
.list-value2
,
...
...
@@ -1308,9 +1341,6 @@ export default {
.order-queueUp
.queueUp-rowNumber3
.rowNumber-list
.list-value3
{
color
:
#fff
;
}
.order-queueUp
.queueUp-rowNumber3
.rowNumber-list
.list-value
{
flex-shrink
:
0
;
}
.order-queueUp
.queueUp-rowNumber3
.rowNumber-takeNum
,
.order-queueUp
.queueUp-rowNumber3
.rowNumber-takeNum2
{
background-color
:
#fff
;
...
...
@@ -1332,8 +1362,8 @@ export default {
.order-certificate
.certificate-box
.box-QRcode
{
display
:
block
;
width
:
18
0px
;
height
:
18
0px
;
width
:
20
0px
;
height
:
20
0px
;
margin
:
0
auto
;
}
.order-certificate
.certificate-box
.box-QRcode2
{
...
...
@@ -1567,4 +1597,10 @@ export default {
}
}
}
.code_view
{
display
:
block
;
width
:
180px
;
height
:
180px
;
margin
:
0
auto
;
}
</
style
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment