Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
N
njzsb
Project
Project
Details
Activity
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
徐州
njzsb
Commits
4976131f
Commit
4976131f
authored
Jan 09, 2023
by
houyu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
打印
parent
e55fa92a
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
148 additions
and
35 deletions
+148
-35
Fstzs_Add.jsp
WebRoot/WEB-INF/pages/fstzs/Fstzs_Add.jsp
+3
-1
Fstzs_Print.jsp
WebRoot/WEB-INF/pages/fstzs/Fstzs_Print.jsp
+143
-34
qrcode.min.js
WebRoot/images/js/qrcode.min.js
+2
-0
No files found.
WebRoot/WEB-INF/pages/fstzs/Fstzs_Add.jsp
View file @
4976131f
...
@@ -115,7 +115,9 @@
...
@@ -115,7 +115,9 @@
</td>
</td>
<th
width=
"15"
>
缴款人类型
</th>
<th
width=
"15"
>
缴款人类型
</th>
<td
width=
"35%"
>
<td
width=
"35%"
>
<input
style=
"width:90%"
value=
"单位"
disabled
/>
<
%
--
<
input
style=
"width:90%"
value=
"单位"
disabled
/>
--%>
<input
type=
"radio"
name=
"rfxmsfxx.tqjn"
value=
"0"
checked=
"checked"
/>
单位
<input
type=
"radio"
name=
"rfxmsfxx.tqjn"
value=
"1"
/>
个人
</td>
</td>
</tr>
</tr>
...
...
WebRoot/WEB-INF/pages/fstzs/Fstzs_Print.jsp
View file @
4976131f
...
@@ -19,58 +19,124 @@
...
@@ -19,58 +19,124 @@
.normalsize
{
.normalsize
{
font-size
:
14.8px
;
font-size
:
14.8px
;
}
}
/*缴款人全称*/
/*二维码*/
.f0
{
left
:
850px
;
top
:
30px
;
font-size
:
14.8px
;
}
/*编制日期*/
.f1
{
.f1
{
left
:
2
9
0px
;
left
:
2
4
0px
;
top
:
220
px
;
top
:
138
px
;
font-size
:
14.8px
;
font-size
:
14.8px
;
}
}
/*缴款
人账号
*/
/*缴款
码
*/
.f2
{
.f2
{
left
:
29
0px
;
left
:
81
0px
;
top
:
270
px
;
top
:
138
px
;
font-size
:
14.8px
;
font-size
:
14.8px
;
}
}
/*缴款人
开户银行
*/
/*缴款人
全称
*/
.f3
{
.f3
{
left
:
290px
;
left
:
290px
;
top
:
310
px
;
top
:
177
px
;
font-size
:
14.8px
;
font-size
:
14.8px
;
}
}
/*
合计金额小写
*/
/*
执收单位
*/
.f4
{
.f4
{
left
:
29
0px
;
left
:
72
0px
;
top
:
355
px
;
top
:
177
px
;
font-size
:
14.8px
;
font-size
:
14.8px
;
}
}
/*
合计金额大写
*/
/*
缴款人手机号
*/
.f5
{
.f5
{
left
:
71
0px
;
left
:
29
0px
;
top
:
355
px
;
top
:
218
px
;
font-size
:
14.8px
;
font-size
:
14.8px
;
}
}
/*
备注
*/
/*
户名
*/
.f6
{
.f6
{
left
:
720px
;
top
:
259px
;
font-size
:
14.8px
;
}
/*缴款人类型*/
.f7
{
left
:
290px
;
left
:
290px
;
top
:
405px
;
top
:
294px
;
font-size
:
14.8px
;
}
/*账号*/
.f8
{
left
:
720px
;
top
:
294px
;
font-size
:
14.8px
;
}
/*备注*/
.f9
{
left
:
290px
;
top
:
334px
;
font-size
:
14.8px
;
}
/*开户行*/
.f10
{
left
:
720px
;
top
:
334px
;
font-size
:
14.8px
;
font-size
:
14.8px
;
}
}
/*项目编码*/
/*项目编码*/
.f
7
{
.f
11
{
left
:
140px
;
left
:
140px
;
top
:
490px
;
top
:
409px
;
font-size
:
14.8px
;
}
/*项目名称*/
.f12
{
left
:
290px
;
top
:
409px
;
font-size
:
14.8px
;
}
/*单位*/
.f13
{
left
:
560px
;
top
:
409px
;
font-size
:
14.8px
;
font-size
:
14.8px
;
}
}
/*数量*/
/*数量*/
.f8
{
.f14
{
left
:
630px
;
left
:
640px
;
top
:
490px
;
top
:
409px
;
font-size
:
14.8px
;
}
/*标准*/
.f15
{
left
:
720px
;
top
:
409px
;
font-size
:
14.8px
;
font-size
:
14.8px
;
}
}
/*金额*/
/*金额*/
.f9
{
.f16
{
left
:
810px
;
left
:
820px
;
top
:
490px
;
top
:
409px
;
font-size
:
14.8px
;
}
/*项目备注*/
.f17
{
left
:
920px
;
top
:
409px
;
font-size
:
14.8px
;
}
/*合计金额(小写 )*/
.f18
{
left
:
290px
;
top
:
594px
;
font-size
:
14.8px
;
}
/*合计金额(大写 )*/
.f19
{
left
:
290px
;
top
:
623px
;
font-size
:
14.8px
;
font-size
:
14.8px
;
}
}
...
@@ -84,11 +150,13 @@
...
@@ -84,11 +150,13 @@
<title>
Title
</title>
<title>
Title
</title>
<
%@
include
file=
"/common/jsLib.jsp"
%
>
<
%@
include
file=
"/common/jsLib.jsp"
%
>
<script
type=
"text/javascript"
src=
"${ctx}/webResources/js/jatoolPrinter.js"
></script>
<script
type=
"text/javascript"
src=
"${ctx}/webResources/js/jatoolPrinter.js"
></script>
<script
type=
"text/javascript"
src=
"${ctx}/images/js/qrcode.min.js"
></script>
<script>
<script>
$
(
function
(){
$
(
function
(){
doPrint
()
doPrint
()
parent
.
close_win
(
'win_fstzs'
)
parent
.
close_win
(
'win_fstzs'
)
})
})
function
doPrint
()
{
function
doPrint
()
{
var
numSz
=
2
var
numSz
=
2
...
@@ -131,35 +199,76 @@
...
@@ -131,35 +199,76 @@
<div
id=
"page1"
class=
'only_for_print pagestyle'
style=
'width:210mm;height:140mm;position:relative;'
>
<div
id=
"page1"
class=
'only_for_print pagestyle'
style=
'width:210mm;height:140mm;position:relative;'
>
<img
class=
'screen-only'
src=
"${ctx}/images/img/fstzs.png"
style=
"position:absolute;width:100%;height:100%"
/>
<img
class=
'screen-only'
src=
"${ctx}/images/img/fstzs.png"
style=
"position:absolute;width:100%;height:100%"
/>
<div
id=
'f0'
draggable=
'true'
class=
'f0'
>
</div>
<div
id=
'f1'
draggable=
'true'
<div
id=
'f1'
draggable=
'true'
class=
'f1'
>
${fstzs.jsdwmc}
class=
'f1'
>
编制日期
</div>
</div>
<div
id=
'f2'
draggable=
'true'
<div
id=
'f2'
draggable=
'true'
class=
'f2'
>
${fstzs.zhanghao}
class=
'f2'
>
缴款码
</div>
</div>
<div
id=
'f3'
draggable=
'true'
<div
id=
'f3'
draggable=
'true'
class=
'f3'
>
${fstzs.khh}
class=
'f3'
>
缴款人全称
</div>
</div>
<div
id=
'f4'
draggable=
'true'
<div
id=
'f4'
draggable=
'true'
class=
'f4'
>
${fstzs.yjje}
class=
'f4'
>
南京市城市建设费用征收服务中心
</div>
</div>
<div
id=
'f5'
draggable=
'true'
<div
id=
'f5'
draggable=
'true'
class=
'f5'
>
${fstzs.yjjedx}
class=
'f5'
>
缴款人手机号
</div>
</div>
<div
id=
'f6'
draggable=
'true'
<div
id=
'f6'
draggable=
'true'
class=
'f6'
>
${fstzs.beizhu}
class=
'f6'
>
南京市财政局
</div>
</div>
<div
id=
'f7'
draggable=
'true'
<div
id=
'f7'
draggable=
'true'
class=
'f7'
>
${fstzs.slbh}
class=
'f7'
>
缴款人类型
</div>
</div>
<div
id=
'f8'
draggable=
'true'
<div
id=
'f8'
draggable=
'true'
class=
'f8'
>
${fstzs.paymentItemPending.csmj}
class=
'f8'
>
10105901040000062
</div>
</div>
<div
id=
'f9'
draggable=
'true'
<div
id=
'f9'
draggable=
'true'
class=
'f9'
>
${fstzs.yjje}
class=
'f9'
>
备注
</div>
</div>
<div
id=
'f10'
draggable=
'true'
class=
'f10'
>
南京农行鼓楼支行
</div>
</div>
<div
id=
'f11'
draggable=
'true'
class=
'f11'
>
项目编码
</div>
<div
id=
'f12'
draggable=
'true'
class=
'f12'
>
项目名称
</div>
<div
id=
'f13'
draggable=
'true'
class=
'f13'
>
单位
</div>
<div
id=
'f14'
draggable=
'true'
class=
'f14'
>
数量
</div>
<div
id=
'f15'
draggable=
'true'
class=
'f15'
>
标准
</div>
<div
id=
'f16'
draggable=
'true'
class=
'f16'
>
金额
</div>
<div
id=
'f17'
draggable=
'true'
class=
'f17'
>
项目备注
</div>
<div
id=
'f18'
draggable=
'true'
class=
'f18'
>
合计金额( 小写 )
</div>
<div
id=
'f19'
draggable=
'true'
class=
'f19'
>
合计金额(大写 )
</div>
</div>
<script>
<%--
二维码
--%>
new
QRCode
(
document
.
getElementById
(
"f0"
),
{
text
:
"https://www.baidu.com/?tn=78000241_45_hao_pg"
,
width
:
80
,
height
:
80
,
correctLevel
:
0
// 二维码结构复杂性 0~3
});
</script>
<OBJECT
ID=
"jatoolsPrinter"
CLASSID=
"CLSID:B43D3361-D075-4BE2-87FE-057188254255"
<OBJECT
ID=
"jatoolsPrinter"
CLASSID=
"CLSID:B43D3361-D075-4BE2-87FE-057188254255"
...
...
WebRoot/images/js/qrcode.min.js
0 → 100644
View file @
4976131f
var
QRCode
;
!
function
()
{
function
a
(
a
)
{
this
.
mode
=
c
.
MODE_8BIT_BYTE
,
this
.
data
=
a
,
this
.
parsedData
=
[];
for
(
var
b
=
[],
d
=
0
,
e
=
this
.
data
.
length
;
e
>
d
;
d
++
)
{
var
f
=
this
.
data
.
charCodeAt
(
d
);
f
>
65536
?
(
b
[
0
]
=
240
|
(
1835008
&
f
)
>>>
18
,
b
[
1
]
=
128
|
(
258048
&
f
)
>>>
12
,
b
[
2
]
=
128
|
(
4032
&
f
)
>>>
6
,
b
[
3
]
=
128
|
63
&
f
)
:
f
>
2048
?
(
b
[
0
]
=
224
|
(
61440
&
f
)
>>>
12
,
b
[
1
]
=
128
|
(
4032
&
f
)
>>>
6
,
b
[
2
]
=
128
|
63
&
f
)
:
f
>
128
?
(
b
[
0
]
=
192
|
(
1984
&
f
)
>>>
6
,
b
[
1
]
=
128
|
63
&
f
)
:
b
[
0
]
=
f
,
this
.
parsedData
=
this
.
parsedData
.
concat
(
b
)
}
this
.
parsedData
.
length
!=
this
.
data
.
length
&&
(
this
.
parsedData
.
unshift
(
191
),
this
.
parsedData
.
unshift
(
187
),
this
.
parsedData
.
unshift
(
239
))
}
function
b
(
a
,
b
)
{
this
.
typeNumber
=
a
,
this
.
errorCorrectLevel
=
b
,
this
.
modules
=
null
,
this
.
moduleCount
=
0
,
this
.
dataCache
=
null
,
this
.
dataList
=
[]
}
function
i
(
a
,
b
)
{
if
(
void
0
==
a
.
length
)
throw
new
Error
(
a
.
length
+
"/"
+
b
);
for
(
var
c
=
0
;
c
<
a
.
length
&&
0
==
a
[
c
];)
c
++
;
this
.
num
=
new
Array
(
a
.
length
-
c
+
b
);
for
(
var
d
=
0
;
d
<
a
.
length
-
c
;
d
++
)
this
.
num
[
d
]
=
a
[
d
+
c
]
}
function
j
(
a
,
b
)
{
this
.
totalCount
=
a
,
this
.
dataCount
=
b
}
function
k
()
{
this
.
buffer
=
[],
this
.
length
=
0
}
function
m
()
{
return
"undefined"
!=
typeof
CanvasRenderingContext2D
}
function
n
()
{
var
a
=
!
1
,
b
=
navigator
.
userAgent
;
return
/android/i
.
test
(
b
)
&&
(
a
=
!
0
,
aMat
=
b
.
toString
().
match
(
/android
([
0-9
]\.[
0-9
])
/i
),
aMat
&&
aMat
[
1
]
&&
(
a
=
parseFloat
(
aMat
[
1
]))),
a
}
function
r
(
a
,
b
)
{
for
(
var
c
=
1
,
e
=
s
(
a
),
f
=
0
,
g
=
l
.
length
;
g
>=
f
;
f
++
)
{
var
h
=
0
;
switch
(
b
)
{
case
d
.
L
:
h
=
l
[
f
][
0
];
break
;
case
d
.
M
:
h
=
l
[
f
][
1
];
break
;
case
d
.
Q
:
h
=
l
[
f
][
2
];
break
;
case
d
.
H
:
h
=
l
[
f
][
3
]
}
if
(
h
>=
e
)
break
;
c
++
}
if
(
c
>
l
.
length
)
throw
new
Error
(
"Too long data"
);
return
c
}
function
s
(
a
)
{
var
b
=
encodeURI
(
a
).
toString
().
replace
(
/
\%[
0-9a-fA-F
]{2}
/g
,
"a"
);
return
b
.
length
+
(
b
.
length
!=
a
?
3
:
0
)
}
a
.
prototype
=
{
getLength
:
function
()
{
return
this
.
parsedData
.
length
},
write
:
function
(
a
)
{
for
(
var
b
=
0
,
c
=
this
.
parsedData
.
length
;
c
>
b
;
b
++
)
a
.
put
(
this
.
parsedData
[
b
],
8
)
}
},
b
.
prototype
=
{
addData
:
function
(
b
)
{
var
c
=
new
a
(
b
);
this
.
dataList
.
push
(
c
),
this
.
dataCache
=
null
},
isDark
:
function
(
a
,
b
)
{
if
(
0
>
a
||
this
.
moduleCount
<=
a
||
0
>
b
||
this
.
moduleCount
<=
b
)
throw
new
Error
(
a
+
","
+
b
);
return
this
.
modules
[
a
][
b
]
},
getModuleCount
:
function
()
{
return
this
.
moduleCount
},
make
:
function
()
{
this
.
makeImpl
(
!
1
,
this
.
getBestMaskPattern
())
},
makeImpl
:
function
(
a
,
c
)
{
this
.
moduleCount
=
4
*
this
.
typeNumber
+
17
,
this
.
modules
=
new
Array
(
this
.
moduleCount
);
for
(
var
d
=
0
;
d
<
this
.
moduleCount
;
d
++
)
{
this
.
modules
[
d
]
=
new
Array
(
this
.
moduleCount
);
for
(
var
e
=
0
;
e
<
this
.
moduleCount
;
e
++
)
this
.
modules
[
d
][
e
]
=
null
}
this
.
setupPositionProbePattern
(
0
,
0
),
this
.
setupPositionProbePattern
(
this
.
moduleCount
-
7
,
0
),
this
.
setupPositionProbePattern
(
0
,
this
.
moduleCount
-
7
),
this
.
setupPositionAdjustPattern
(),
this
.
setupTimingPattern
(),
this
.
setupTypeInfo
(
a
,
c
),
this
.
typeNumber
>=
7
&&
this
.
setupTypeNumber
(
a
),
null
==
this
.
dataCache
&&
(
this
.
dataCache
=
b
.
createData
(
this
.
typeNumber
,
this
.
errorCorrectLevel
,
this
.
dataList
)),
this
.
mapData
(
this
.
dataCache
,
c
)
},
setupPositionProbePattern
:
function
(
a
,
b
)
{
for
(
var
c
=
-
1
;
7
>=
c
;
c
++
)
if
(
!
(
-
1
>=
a
+
c
||
this
.
moduleCount
<=
a
+
c
))
for
(
var
d
=
-
1
;
7
>=
d
;
d
++
)
-
1
>=
b
+
d
||
this
.
moduleCount
<=
b
+
d
||
(
this
.
modules
[
a
+
c
][
b
+
d
]
=
c
>=
0
&&
6
>=
c
&&
(
0
==
d
||
6
==
d
)
||
d
>=
0
&&
6
>=
d
&&
(
0
==
c
||
6
==
c
)
||
c
>=
2
&&
4
>=
c
&&
d
>=
2
&&
4
>=
d
?
!
0
:
!
1
)
},
getBestMaskPattern
:
function
()
{
for
(
var
a
=
0
,
b
=
0
,
c
=
0
;
8
>
c
;
c
++
)
{
this
.
makeImpl
(
!
0
,
c
);
var
d
=
f
.
getLostPoint
(
this
);
(
0
==
c
||
a
>
d
)
&&
(
a
=
d
,
b
=
c
)
}
return
b
},
createMovieClip
:
function
(
a
,
b
,
c
)
{
var
d
=
a
.
createEmptyMovieClip
(
b
,
c
),
e
=
1
;
this
.
make
();
for
(
var
f
=
0
;
f
<
this
.
modules
.
length
;
f
++
)
for
(
var
g
=
f
*
e
,
h
=
0
;
h
<
this
.
modules
[
f
].
length
;
h
++
)
{
var
i
=
h
*
e
,
j
=
this
.
modules
[
f
][
h
];
j
&&
(
d
.
beginFill
(
0
,
100
),
d
.
moveTo
(
i
,
g
),
d
.
lineTo
(
i
+
e
,
g
),
d
.
lineTo
(
i
+
e
,
g
+
e
),
d
.
lineTo
(
i
,
g
+
e
),
d
.
endFill
())
}
return
d
},
setupTimingPattern
:
function
()
{
for
(
var
a
=
8
;
a
<
this
.
moduleCount
-
8
;
a
++
)
null
==
this
.
modules
[
a
][
6
]
&&
(
this
.
modules
[
a
][
6
]
=
0
==
a
%
2
);
for
(
var
b
=
8
;
b
<
this
.
moduleCount
-
8
;
b
++
)
null
==
this
.
modules
[
6
][
b
]
&&
(
this
.
modules
[
6
][
b
]
=
0
==
b
%
2
)
},
setupPositionAdjustPattern
:
function
()
{
for
(
var
a
=
f
.
getPatternPosition
(
this
.
typeNumber
),
b
=
0
;
b
<
a
.
length
;
b
++
)
for
(
var
c
=
0
;
c
<
a
.
length
;
c
++
)
{
var
d
=
a
[
b
],
e
=
a
[
c
];
if
(
null
==
this
.
modules
[
d
][
e
])
for
(
var
g
=
-
2
;
2
>=
g
;
g
++
)
for
(
var
h
=
-
2
;
2
>=
h
;
h
++
)
this
.
modules
[
d
+
g
][
e
+
h
]
=
-
2
==
g
||
2
==
g
||
-
2
==
h
||
2
==
h
||
0
==
g
&&
0
==
h
?
!
0
:
!
1
}
},
setupTypeNumber
:
function
(
a
)
{
for
(
var
b
=
f
.
getBCHTypeNumber
(
this
.
typeNumber
),
c
=
0
;
18
>
c
;
c
++
)
{
var
d
=
!
a
&&
1
==
(
1
&
b
>>
c
);
this
.
modules
[
Math
.
floor
(
c
/
3
)][
c
%
3
+
this
.
moduleCount
-
8
-
3
]
=
d
}
for
(
var
c
=
0
;
18
>
c
;
c
++
)
{
var
d
=
!
a
&&
1
==
(
1
&
b
>>
c
);
this
.
modules
[
c
%
3
+
this
.
moduleCount
-
8
-
3
][
Math
.
floor
(
c
/
3
)]
=
d
}
},
setupTypeInfo
:
function
(
a
,
b
)
{
for
(
var
c
=
this
.
errorCorrectLevel
<<
3
|
b
,
d
=
f
.
getBCHTypeInfo
(
c
),
e
=
0
;
15
>
e
;
e
++
)
{
var
g
=
!
a
&&
1
==
(
1
&
d
>>
e
);
6
>
e
?
this
.
modules
[
e
][
8
]
=
g
:
8
>
e
?
this
.
modules
[
e
+
1
][
8
]
=
g
:
this
.
modules
[
this
.
moduleCount
-
15
+
e
][
8
]
=
g
}
for
(
var
e
=
0
;
15
>
e
;
e
++
)
{
var
g
=
!
a
&&
1
==
(
1
&
d
>>
e
);
8
>
e
?
this
.
modules
[
8
][
this
.
moduleCount
-
e
-
1
]
=
g
:
9
>
e
?
this
.
modules
[
8
][
15
-
e
-
1
+
1
]
=
g
:
this
.
modules
[
8
][
15
-
e
-
1
]
=
g
}
this
.
modules
[
this
.
moduleCount
-
8
][
8
]
=
!
a
},
mapData
:
function
(
a
,
b
)
{
for
(
var
c
=
-
1
,
d
=
this
.
moduleCount
-
1
,
e
=
7
,
g
=
0
,
h
=
this
.
moduleCount
-
1
;
h
>
0
;
h
-=
2
)
for
(
6
==
h
&&
h
--
;
;)
{
for
(
var
i
=
0
;
2
>
i
;
i
++
)
if
(
null
==
this
.
modules
[
d
][
h
-
i
])
{
var
j
=
!
1
;
g
<
a
.
length
&&
(
j
=
1
==
(
1
&
a
[
g
]
>>>
e
));
var
k
=
f
.
getMask
(
b
,
d
,
h
-
i
);
k
&&
(
j
=
!
j
),
this
.
modules
[
d
][
h
-
i
]
=
j
,
e
--
,
-
1
==
e
&&
(
g
++
,
e
=
7
)
}
if
(
d
+=
c
,
0
>
d
||
this
.
moduleCount
<=
d
)
{
d
-=
c
,
c
=
-
c
;
break
}
}
}
},
b
.
PAD0
=
236
,
b
.
PAD1
=
17
,
b
.
createData
=
function
(
a
,
c
,
d
)
{
for
(
var
e
=
j
.
getRSBlocks
(
a
,
c
),
g
=
new
k
,
h
=
0
;
h
<
d
.
length
;
h
++
)
{
var
i
=
d
[
h
];
g
.
put
(
i
.
mode
,
4
),
g
.
put
(
i
.
getLength
(),
f
.
getLengthInBits
(
i
.
mode
,
a
)),
i
.
write
(
g
)
}
for
(
var
l
=
0
,
h
=
0
;
h
<
e
.
length
;
h
++
)
l
+=
e
[
h
].
dataCount
;
if
(
g
.
getLengthInBits
()
>
8
*
l
)
throw
new
Error
(
"code length overflow. ("
+
g
.
getLengthInBits
()
+
">"
+
8
*
l
+
")"
);
for
(
g
.
getLengthInBits
()
+
4
<=
8
*
l
&&
g
.
put
(
0
,
4
);
0
!=
g
.
getLengthInBits
()
%
8
;)
g
.
putBit
(
!
1
);
for
(;
;)
{
if
(
g
.
getLengthInBits
()
>=
8
*
l
)
break
;
if
(
g
.
put
(
b
.
PAD0
,
8
),
g
.
getLengthInBits
()
>=
8
*
l
)
break
;
g
.
put
(
b
.
PAD1
,
8
)
}
return
b
.
createBytes
(
g
,
e
)
},
b
.
createBytes
=
function
(
a
,
b
)
{
for
(
var
c
=
0
,
d
=
0
,
e
=
0
,
g
=
new
Array
(
b
.
length
),
h
=
new
Array
(
b
.
length
),
j
=
0
;
j
<
b
.
length
;
j
++
)
{
var
k
=
b
[
j
].
dataCount
,
l
=
b
[
j
].
totalCount
-
k
;
d
=
Math
.
max
(
d
,
k
),
e
=
Math
.
max
(
e
,
l
),
g
[
j
]
=
new
Array
(
k
);
for
(
var
m
=
0
;
m
<
g
[
j
].
length
;
m
++
)
g
[
j
][
m
]
=
255
&
a
.
buffer
[
m
+
c
];
c
+=
k
;
var
n
=
f
.
getErrorCorrectPolynomial
(
l
),
o
=
new
i
(
g
[
j
],
n
.
getLength
()
-
1
),
p
=
o
.
mod
(
n
);
h
[
j
]
=
new
Array
(
n
.
getLength
()
-
1
);
for
(
var
m
=
0
;
m
<
h
[
j
].
length
;
m
++
)
{
var
q
=
m
+
p
.
getLength
()
-
h
[
j
].
length
;
h
[
j
][
m
]
=
q
>=
0
?
p
.
get
(
q
)
:
0
}
}
for
(
var
r
=
0
,
m
=
0
;
m
<
b
.
length
;
m
++
)
r
+=
b
[
m
].
totalCount
;
for
(
var
s
=
new
Array
(
r
),
t
=
0
,
m
=
0
;
d
>
m
;
m
++
)
for
(
var
j
=
0
;
j
<
b
.
length
;
j
++
)
m
<
g
[
j
].
length
&&
(
s
[
t
++
]
=
g
[
j
][
m
]);
for
(
var
m
=
0
;
e
>
m
;
m
++
)
for
(
var
j
=
0
;
j
<
b
.
length
;
j
++
)
m
<
h
[
j
].
length
&&
(
s
[
t
++
]
=
h
[
j
][
m
]);
return
s
};
for
(
var
c
=
{
MODE_NUMBER
:
1
,
MODE_ALPHA_NUM
:
2
,
MODE_8BIT_BYTE
:
4
,
MODE_KANJI
:
8
},
d
=
{
L
:
1
,
M
:
0
,
Q
:
3
,
H
:
2
},
e
=
{
PATTERN000
:
0
,
PATTERN001
:
1
,
PATTERN010
:
2
,
PATTERN011
:
3
,
PATTERN100
:
4
,
PATTERN101
:
5
,
PATTERN110
:
6
,
PATTERN111
:
7
},
f
=
{
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
:
1335
,
G18
:
7973
,
G15_MASK
:
21522
,
getBCHTypeInfo
:
function
(
a
)
{
for
(
var
b
=
a
<<
10
;
f
.
getBCHDigit
(
b
)
-
f
.
getBCHDigit
(
f
.
G15
)
>=
0
;)
b
^=
f
.
G15
<<
f
.
getBCHDigit
(
b
)
-
f
.
getBCHDigit
(
f
.
G15
);
return
(
a
<<
10
|
b
)
^
f
.
G15_MASK
},
getBCHTypeNumber
:
function
(
a
)
{
for
(
var
b
=
a
<<
12
;
f
.
getBCHDigit
(
b
)
-
f
.
getBCHDigit
(
f
.
G18
)
>=
0
;)
b
^=
f
.
G18
<<
f
.
getBCHDigit
(
b
)
-
f
.
getBCHDigit
(
f
.
G18
);
return
a
<<
12
|
b
},
getBCHDigit
:
function
(
a
)
{
for
(
var
b
=
0
;
0
!=
a
;)
b
++
,
a
>>>=
1
;
return
b
},
getPatternPosition
:
function
(
a
)
{
return
f
.
PATTERN_POSITION_TABLE
[
a
-
1
]
},
getMask
:
function
(
a
,
b
,
c
)
{
switch
(
a
)
{
case
e
.
PATTERN000
:
return
0
==
(
b
+
c
)
%
2
;
case
e
.
PATTERN001
:
return
0
==
b
%
2
;
case
e
.
PATTERN010
:
return
0
==
c
%
3
;
case
e
.
PATTERN011
:
return
0
==
(
b
+
c
)
%
3
;
case
e
.
PATTERN100
:
return
0
==
(
Math
.
floor
(
b
/
2
)
+
Math
.
floor
(
c
/
3
))
%
2
;
case
e
.
PATTERN101
:
return
0
==
b
*
c
%
2
+
b
*
c
%
3
;
case
e
.
PATTERN110
:
return
0
==
(
b
*
c
%
2
+
b
*
c
%
3
)
%
2
;
case
e
.
PATTERN111
:
return
0
==
(
b
*
c
%
3
+
(
b
+
c
)
%
2
)
%
2
;
default
:
throw
new
Error
(
"bad maskPattern:"
+
a
)
}
},
getErrorCorrectPolynomial
:
function
(
a
)
{
for
(
var
b
=
new
i
([
1
],
0
),
c
=
0
;
a
>
c
;
c
++
)
b
=
b
.
multiply
(
new
i
([
1
,
g
.
gexp
(
c
)],
0
));
return
b
},
getLengthInBits
:
function
(
a
,
b
)
{
if
(
b
>=
1
&&
10
>
b
)
switch
(
a
)
{
case
c
.
MODE_NUMBER
:
return
10
;
case
c
.
MODE_ALPHA_NUM
:
return
9
;
case
c
.
MODE_8BIT_BYTE
:
return
8
;
case
c
.
MODE_KANJI
:
return
8
;
default
:
throw
new
Error
(
"mode:"
+
a
)
}
else
if
(
27
>
b
)
switch
(
a
)
{
case
c
.
MODE_NUMBER
:
return
12
;
case
c
.
MODE_ALPHA_NUM
:
return
11
;
case
c
.
MODE_8BIT_BYTE
:
return
16
;
case
c
.
MODE_KANJI
:
return
10
;
default
:
throw
new
Error
(
"mode:"
+
a
)
}
else
{
if
(
!
(
41
>
b
))
throw
new
Error
(
"type:"
+
b
);
switch
(
a
)
{
case
c
.
MODE_NUMBER
:
return
14
;
case
c
.
MODE_ALPHA_NUM
:
return
13
;
case
c
.
MODE_8BIT_BYTE
:
return
16
;
case
c
.
MODE_KANJI
:
return
12
;
default
:
throw
new
Error
(
"mode:"
+
a
)
}
}
},
getLostPoint
:
function
(
a
)
{
for
(
var
b
=
a
.
getModuleCount
(),
c
=
0
,
d
=
0
;
b
>
d
;
d
++
)
for
(
var
e
=
0
;
b
>
e
;
e
++
)
{
for
(
var
f
=
0
,
g
=
a
.
isDark
(
d
,
e
),
h
=
-
1
;
1
>=
h
;
h
++
)
if
(
!
(
0
>
d
+
h
||
d
+
h
>=
b
))
for
(
var
i
=
-
1
;
1
>=
i
;
i
++
)
0
>
e
+
i
||
e
+
i
>=
b
||
(
0
!=
h
||
0
!=
i
)
&&
g
==
a
.
isDark
(
d
+
h
,
e
+
i
)
&&
f
++
;
f
>
5
&&
(
c
+=
3
+
f
-
5
)
}
for
(
var
d
=
0
;
b
-
1
>
d
;
d
++
)
for
(
var
e
=
0
;
b
-
1
>
e
;
e
++
)
{
var
j
=
0
;
a
.
isDark
(
d
,
e
)
&&
j
++
,
a
.
isDark
(
d
+
1
,
e
)
&&
j
++
,
a
.
isDark
(
d
,
e
+
1
)
&&
j
++
,
a
.
isDark
(
d
+
1
,
e
+
1
)
&&
j
++
,
(
0
==
j
||
4
==
j
)
&&
(
c
+=
3
)
}
for
(
var
d
=
0
;
b
>
d
;
d
++
)
for
(
var
e
=
0
;
b
-
6
>
e
;
e
++
)
a
.
isDark
(
d
,
e
)
&&
!
a
.
isDark
(
d
,
e
+
1
)
&&
a
.
isDark
(
d
,
e
+
2
)
&&
a
.
isDark
(
d
,
e
+
3
)
&&
a
.
isDark
(
d
,
e
+
4
)
&&
!
a
.
isDark
(
d
,
e
+
5
)
&&
a
.
isDark
(
d
,
e
+
6
)
&&
(
c
+=
40
);
for
(
var
e
=
0
;
b
>
e
;
e
++
)
for
(
var
d
=
0
;
b
-
6
>
d
;
d
++
)
a
.
isDark
(
d
,
e
)
&&
!
a
.
isDark
(
d
+
1
,
e
)
&&
a
.
isDark
(
d
+
2
,
e
)
&&
a
.
isDark
(
d
+
3
,
e
)
&&
a
.
isDark
(
d
+
4
,
e
)
&&
!
a
.
isDark
(
d
+
5
,
e
)
&&
a
.
isDark
(
d
+
6
,
e
)
&&
(
c
+=
40
);
for
(
var
k
=
0
,
e
=
0
;
b
>
e
;
e
++
)
for
(
var
d
=
0
;
b
>
d
;
d
++
)
a
.
isDark
(
d
,
e
)
&&
k
++
;
var
l
=
Math
.
abs
(
100
*
k
/
b
/
b
-
50
)
/
5
;
return
c
+=
10
*
l
}
},
g
=
{
glog
:
function
(
a
)
{
if
(
1
>
a
)
throw
new
Error
(
"glog("
+
a
+
")"
);
return
g
.
LOG_TABLE
[
a
]
},
gexp
:
function
(
a
)
{
for
(;
0
>
a
;)
a
+=
255
;
for
(;
a
>=
256
;)
a
-=
255
;
return
g
.
EXP_TABLE
[
a
]
},
EXP_TABLE
:
new
Array
(
256
),
LOG_TABLE
:
new
Array
(
256
)
},
h
=
0
;
8
>
h
;
h
++
)
g
.
EXP_TABLE
[
h
]
=
1
<<
h
;
for
(
var
h
=
8
;
256
>
h
;
h
++
)
g
.
EXP_TABLE
[
h
]
=
g
.
EXP_TABLE
[
h
-
4
]
^
g
.
EXP_TABLE
[
h
-
5
]
^
g
.
EXP_TABLE
[
h
-
6
]
^
g
.
EXP_TABLE
[
h
-
8
];
for
(
var
h
=
0
;
255
>
h
;
h
++
)
g
.
LOG_TABLE
[
g
.
EXP_TABLE
[
h
]]
=
h
;
i
.
prototype
=
{
get
:
function
(
a
)
{
return
this
.
num
[
a
]
},
getLength
:
function
()
{
return
this
.
num
.
length
},
multiply
:
function
(
a
)
{
for
(
var
b
=
new
Array
(
this
.
getLength
()
+
a
.
getLength
()
-
1
),
c
=
0
;
c
<
this
.
getLength
();
c
++
)
for
(
var
d
=
0
;
d
<
a
.
getLength
();
d
++
)
b
[
c
+
d
]
^=
g
.
gexp
(
g
.
glog
(
this
.
get
(
c
))
+
g
.
glog
(
a
.
get
(
d
)));
return
new
i
(
b
,
0
)
},
mod
:
function
(
a
)
{
if
(
this
.
getLength
()
-
a
.
getLength
()
<
0
)
return
this
;
for
(
var
b
=
g
.
glog
(
this
.
get
(
0
))
-
g
.
glog
(
a
.
get
(
0
)),
c
=
new
Array
(
this
.
getLength
()),
d
=
0
;
d
<
this
.
getLength
();
d
++
)
c
[
d
]
=
this
.
get
(
d
);
for
(
var
d
=
0
;
d
<
a
.
getLength
();
d
++
)
c
[
d
]
^=
g
.
gexp
(
g
.
glog
(
a
.
get
(
d
))
+
b
);
return
new
i
(
c
,
0
).
mod
(
a
)
}
},
j
.
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
]],
j
.
getRSBlocks
=
function
(
a
,
b
)
{
var
c
=
j
.
getRsBlockTable
(
a
,
b
);
if
(
void
0
==
c
)
throw
new
Error
(
"bad rs block @ typeNumber:"
+
a
+
"/errorCorrectLevel:"
+
b
);
for
(
var
d
=
c
.
length
/
3
,
e
=
[],
f
=
0
;
d
>
f
;
f
++
)
for
(
var
g
=
c
[
3
*
f
+
0
],
h
=
c
[
3
*
f
+
1
],
i
=
c
[
3
*
f
+
2
],
k
=
0
;
g
>
k
;
k
++
)
e
.
push
(
new
j
(
h
,
i
));
return
e
},
j
.
getRsBlockTable
=
function
(
a
,
b
)
{
switch
(
b
)
{
case
d
.
L
:
return
j
.
RS_BLOCK_TABLE
[
4
*
(
a
-
1
)
+
0
];
case
d
.
M
:
return
j
.
RS_BLOCK_TABLE
[
4
*
(
a
-
1
)
+
1
];
case
d
.
Q
:
return
j
.
RS_BLOCK_TABLE
[
4
*
(
a
-
1
)
+
2
];
case
d
.
H
:
return
j
.
RS_BLOCK_TABLE
[
4
*
(
a
-
1
)
+
3
];
default
:
return
void
0
}
},
k
.
prototype
=
{
get
:
function
(
a
)
{
var
b
=
Math
.
floor
(
a
/
8
);
return
1
==
(
1
&
this
.
buffer
[
b
]
>>>
7
-
a
%
8
)
},
put
:
function
(
a
,
b
)
{
for
(
var
c
=
0
;
b
>
c
;
c
++
)
this
.
putBit
(
1
==
(
1
&
a
>>>
b
-
c
-
1
))
},
getLengthInBits
:
function
()
{
return
this
.
length
},
putBit
:
function
(
a
)
{
var
b
=
Math
.
floor
(
this
.
length
/
8
);
this
.
buffer
.
length
<=
b
&&
this
.
buffer
.
push
(
0
),
a
&&
(
this
.
buffer
[
b
]
|=
128
>>>
this
.
length
%
8
),
this
.
length
++
}
};
var
l
=
[[
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
]],
o
=
function
()
{
var
a
=
function
(
a
,
b
)
{
this
.
_el
=
a
,
this
.
_htOption
=
b
};
return
a
.
prototype
.
draw
=
function
(
a
)
{
function
g
(
a
,
b
)
{
var
c
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
a
);
for
(
var
d
in
b
)
b
.
hasOwnProperty
(
d
)
&&
c
.
setAttribute
(
d
,
b
[
d
]);
return
c
}
var
b
=
this
.
_htOption
,
c
=
this
.
_el
,
d
=
a
.
getModuleCount
();
Math
.
floor
(
b
.
width
/
d
),
Math
.
floor
(
b
.
height
/
d
),
this
.
clear
();
var
h
=
g
(
"svg"
,
{
viewBox
:
"0 0 "
+
String
(
d
)
+
" "
+
String
(
d
),
width
:
"100%"
,
height
:
"100%"
,
fill
:
b
.
colorLight
});
h
.
setAttributeNS
(
"http://www.w3.org/2000/xmlns/"
,
"xmlns:xlink"
,
"http://www.w3.org/1999/xlink"
),
c
.
appendChild
(
h
),
h
.
appendChild
(
g
(
"rect"
,
{
fill
:
b
.
colorDark
,
width
:
"1"
,
height
:
"1"
,
id
:
"template"
}));
for
(
var
i
=
0
;
d
>
i
;
i
++
)
for
(
var
j
=
0
;
d
>
j
;
j
++
)
if
(
a
.
isDark
(
i
,
j
))
{
var
k
=
g
(
"use"
,
{
x
:
String
(
i
),
y
:
String
(
j
)
});
k
.
setAttributeNS
(
"http://www.w3.org/1999/xlink"
,
"href"
,
"#template"
),
h
.
appendChild
(
k
)
}
},
a
.
prototype
.
clear
=
function
()
{
for
(;
this
.
_el
.
hasChildNodes
();)
this
.
_el
.
removeChild
(
this
.
_el
.
lastChild
)
},
a
}(),
p
=
"svg"
===
document
.
documentElement
.
tagName
.
toLowerCase
(),
q
=
p
?
o
:
m
()
?
function
()
{
function
a
()
{
this
.
_elImage
.
src
=
this
.
_elCanvas
.
toDataURL
(
"image/png"
),
this
.
_elImage
.
style
.
display
=
"block"
,
this
.
_elCanvas
.
style
.
display
=
"none"
}
function
d
(
a
,
b
)
{
var
c
=
this
;
if
(
c
.
_fFail
=
b
,
c
.
_fSuccess
=
a
,
null
===
c
.
_bSupportDataURI
)
{
var
d
=
document
.
createElement
(
"img"
),
e
=
function
()
{
c
.
_bSupportDataURI
=
!
1
,
c
.
_fFail
&&
_fFail
.
call
(
c
)
},
f
=
function
()
{
c
.
_bSupportDataURI
=
!
0
,
c
.
_fSuccess
&&
c
.
_fSuccess
.
call
(
c
)
};
return
d
.
onabort
=
e
,
d
.
onerror
=
e
,
d
.
onload
=
f
,
d
.
src
=
"data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="
,
void
0
}
c
.
_bSupportDataURI
===
!
0
&&
c
.
_fSuccess
?
c
.
_fSuccess
.
call
(
c
)
:
c
.
_bSupportDataURI
===
!
1
&&
c
.
_fFail
&&
c
.
_fFail
.
call
(
c
)
}
if
(
this
.
_android
&&
this
.
_android
<=
2.1
)
{
var
b
=
1
/
window
.
devicePixelRatio
,
c
=
CanvasRenderingContext2D
.
prototype
.
drawImage
;
CanvasRenderingContext2D
.
prototype
.
drawImage
=
function
(
a
,
d
,
e
,
f
,
g
,
h
,
i
,
j
)
{
if
(
"nodeName"
in
a
&&
/img/i
.
test
(
a
.
nodeName
))
for
(
var
l
=
arguments
.
length
-
1
;
l
>=
1
;
l
--
)
arguments
[
l
]
=
arguments
[
l
]
*
b
;
else
"undefined"
==
typeof
j
&&
(
arguments
[
1
]
*=
b
,
arguments
[
2
]
*=
b
,
arguments
[
3
]
*=
b
,
arguments
[
4
]
*=
b
);
c
.
apply
(
this
,
arguments
)
}
}
var
e
=
function
(
a
,
b
)
{
this
.
_bIsPainted
=
!
1
,
this
.
_android
=
n
(),
this
.
_htOption
=
b
,
this
.
_elCanvas
=
document
.
createElement
(
"canvas"
),
this
.
_elCanvas
.
width
=
b
.
width
,
this
.
_elCanvas
.
height
=
b
.
height
,
a
.
appendChild
(
this
.
_elCanvas
),
this
.
_el
=
a
,
this
.
_oContext
=
this
.
_elCanvas
.
getContext
(
"2d"
),
this
.
_bIsPainted
=
!
1
,
this
.
_elImage
=
document
.
createElement
(
"img"
),
this
.
_elImage
.
style
.
display
=
"none"
,
this
.
_el
.
appendChild
(
this
.
_elImage
),
this
.
_bSupportDataURI
=
null
};
return
e
.
prototype
.
draw
=
function
(
a
)
{
var
b
=
this
.
_elImage
,
c
=
this
.
_oContext
,
d
=
this
.
_htOption
,
e
=
a
.
getModuleCount
(),
f
=
d
.
width
/
e
,
g
=
d
.
height
/
e
,
h
=
Math
.
round
(
f
),
i
=
Math
.
round
(
g
);
b
.
style
.
display
=
"none"
,
this
.
clear
();
for
(
var
j
=
0
;
e
>
j
;
j
++
)
for
(
var
k
=
0
;
e
>
k
;
k
++
)
{
var
l
=
a
.
isDark
(
j
,
k
),
m
=
k
*
f
,
n
=
j
*
g
;
c
.
strokeStyle
=
l
?
d
.
colorDark
:
d
.
colorLight
,
c
.
lineWidth
=
1
,
c
.
fillStyle
=
l
?
d
.
colorDark
:
d
.
colorLight
,
c
.
fillRect
(
m
,
n
,
f
,
g
),
c
.
strokeRect
(
Math
.
floor
(
m
)
+
.
5
,
Math
.
floor
(
n
)
+
.
5
,
h
,
i
),
c
.
strokeRect
(
Math
.
ceil
(
m
)
-
.
5
,
Math
.
ceil
(
n
)
-
.
5
,
h
,
i
)
}
this
.
_bIsPainted
=
!
0
},
e
.
prototype
.
makeImage
=
function
()
{
this
.
_bIsPainted
&&
d
.
call
(
this
,
a
)
},
e
.
prototype
.
isPainted
=
function
()
{
return
this
.
_bIsPainted
},
e
.
prototype
.
clear
=
function
()
{
this
.
_oContext
.
clearRect
(
0
,
0
,
this
.
_elCanvas
.
width
,
this
.
_elCanvas
.
height
),
this
.
_bIsPainted
=
!
1
},
e
.
prototype
.
round
=
function
(
a
)
{
return
a
?
Math
.
floor
(
1
e3
*
a
)
/
1
e3
:
a
},
e
}()
:
function
()
{
var
a
=
function
(
a
,
b
)
{
this
.
_el
=
a
,
this
.
_htOption
=
b
};
return
a
.
prototype
.
draw
=
function
(
a
)
{
for
(
var
b
=
this
.
_htOption
,
c
=
this
.
_el
,
d
=
a
.
getModuleCount
(),
e
=
Math
.
floor
(
b
.
width
/
d
),
f
=
Math
.
floor
(
b
.
height
/
d
),
g
=
[
'<table style="border:0;border-collapse:collapse;">'
],
h
=
0
;
d
>
h
;
h
++
)
{
g
.
push
(
"<tr>"
);
for
(
var
i
=
0
;
d
>
i
;
i
++
)
g
.
push
(
'<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:'
+
e
+
"px;height:"
+
f
+
"px;background-color:"
+
(
a
.
isDark
(
h
,
i
)
?
b
.
colorDark
:
b
.
colorLight
)
+
';"></td>'
);
g
.
push
(
"</tr>"
)
}
g
.
push
(
"</table>"
),
c
.
innerHTML
=
g
.
join
(
""
);
var
j
=
c
.
childNodes
[
0
],
k
=
(
b
.
width
-
j
.
offsetWidth
)
/
2
,
l
=
(
b
.
height
-
j
.
offsetHeight
)
/
2
;
k
>
0
&&
l
>
0
&&
(
j
.
style
.
margin
=
l
+
"px "
+
k
+
"px"
)
},
a
.
prototype
.
clear
=
function
()
{
this
.
_el
.
innerHTML
=
""
},
a
}();
QRCode
=
function
(
a
,
b
)
{
if
(
this
.
_htOption
=
{
width
:
256
,
height
:
256
,
typeNumber
:
4
,
colorDark
:
"#000000"
,
colorLight
:
"#ffffff"
,
correctLevel
:
d
.
H
},
"string"
==
typeof
b
&&
(
b
=
{
text
:
b
}),
b
)
for
(
var
c
in
b
)
this
.
_htOption
[
c
]
=
b
[
c
];
"string"
==
typeof
a
&&
(
a
=
document
.
getElementById
(
a
)),
this
.
_android
=
n
(),
this
.
_el
=
a
,
this
.
_oQRCode
=
null
,
this
.
_oDrawing
=
new
q
(
this
.
_el
,
this
.
_htOption
),
this
.
_htOption
.
text
&&
this
.
makeCode
(
this
.
_htOption
.
text
)
},
QRCode
.
prototype
.
makeCode
=
function
(
a
)
{
this
.
_oQRCode
=
new
b
(
r
(
a
,
this
.
_htOption
.
correctLevel
),
this
.
_htOption
.
correctLevel
),
this
.
_oQRCode
.
addData
(
a
),
this
.
_oQRCode
.
make
(),
this
.
_el
.
title
=
a
,
this
.
_oDrawing
.
draw
(
this
.
_oQRCode
),
this
.
makeImage
()
},
QRCode
.
prototype
.
makeImage
=
function
()
{
"function"
==
typeof
this
.
_oDrawing
.
makeImage
&&
(
!
this
.
_android
||
this
.
_android
>=
3
)
&&
this
.
_oDrawing
.
makeImage
()
},
QRCode
.
prototype
.
clear
=
function
()
{
this
.
_oDrawing
.
clear
()
},
QRCode
.
CorrectLevel
=
d
}();
\ No newline at end of file
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