- Lynnwww2026-09-307864
最近刷到好多帖子说,卡到网点很混乱,激活成别人的卡号的情况,看到可以查询到自己当时申请的时候出的卡号,可以记一下,激活的时候可以对比一下。
步骤挺简单的:
点击申请链接
然后正常进去查询,就进到如下图页面,打开 开发者 Console 输入下面的代码```
JSON.stringify(document.getElementsByClassName("progress-result-wrap")[0].__vue__.$parent.recordInfo)```

mkcrdProgreSts是状态 01制卡中 03已向网点发货 04待领取 06已领取
主楼 - Ruawd2026-09-3019986
去的时候自己的卡号已经被别人拿走了怎么办
- Lynnwww2026-09-307864
- leeyh2026-09-3013559
同制卡中 ^-^
- tide2026-09-3018814
这个卡有什么特别的吗
- error5022026-09-304834
- Githubpack2026-09-307324
集卡,国内首个2开头的万事达
- Lynnwww2026-09-307864
相对来说 号段啥的都比较新,中行还给自定义后6位 卡号挺好的 (收集党) ^-^
- yellow134412026-09-3054245
- Lynnwww2026-09-307864
是在查询最里面的页面吗
- yellow134412026-09-3054245
我的问题,犯傻了,没输信息就要查卡号 ^-^
- 天道酬善2026-09-3014215
卡号不是自定义的吗。早就知道卡号了呀
- Lynnwww2026-09-307864
- 16581084652026-09-3013110
AI直接搓个脚本就行了```
// ==UserScript==
// @name 中国银行预选卡号 / 制卡进度
// @namespace https://open.boc.cn/
// @version 1.1.0
// @description 读取中国银行申请查询页面中的预选卡号和制卡进度
// @match https://open.boc.cn/bankcard/cardReserve/*
// @run-at document-idle
// @grant none
// ==/UserScript==(function () {
'use strict';const STATUS_MAP = {
'00': '待制卡',
'01': '制卡中',
'02': '流程异常',
'03': '制卡完毕,已寄出到网点',
'04': '待领卡',
'05': '流程异常',
'06': '已领卡',
'07': '流程异常'
};let lastCardNo = null;
let lastStatus = null;/*
* 只读取原教程指定的数据。
* 不修改 Vue 对象,也不修改中行网页原有 DOM。
*/
function readRecordInfo() {
try {
const el = document.querySelector('.progress-result-wrap');if (!el) {
return null;
}const vue = el.__vue__;
if (!vue) {
return null;
}/*
* 原教程:
* el.__vue__.$parent.recordInfo
*/
if (
vue.$parent &&
vue.$parent.recordInfo
) {
return vue.$parent.recordInfo;
}/*
* 防止 Vue 层级有小变化。
* 最多向上找 8 层。
*/
let current = vue;for (let i = 0; i < 8; i++) {
if (!current) {
break;
}if (current.recordInfo) {
return current.recordInfo;
}current = current.$parent;
}} catch (error) {
console.warn(
'[BOC] 读取数据失败:',
error
);
}return null;
}function escapeHtml(value) {
return String(value ?? '')
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}/*
* 创建完全独立的显示窗口。
*
* 不使用原网页 class。
* 不修改 progress-result-wrap。
*/
function showInfo(cardNo, statusCode) {
const statusText =
STATUS_MAP[statusCode] ||
未知状态 (${statusCode || '无'});let panel =
document.getElementById(
'__boc_card_reader_panel__'
);if (!panel) {
panel =
document.createElement('div');panel.id =
'__boc_card_reader_panel__';panel.style.cssText = [
'position:fixed',
'right:20px',
'bottom:20px',
'width:320px',
'max-width:calc(100vw - 40px)',
'padding:18px',
'box-sizing:border-box',
'background:#fff',
'color:#222',
'border:1px solid #ddd',
'border-radius:12px',
'box-shadow:0 6px 24px rgba(0,0,0,.18)',
'font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif',
'z-index:2147483647'
].join(';');document.body.appendChild(panel);
}panel.innerHTML = `
<div
style="
display:flex;
justify-content:space-between;
align-items:center;
margin-bottom:16px;
"<strong style="font-size:17px;">
💳 制卡信息
</strong><button
id="__boc_close__"
style="
border:0;
background:transparent;
font-size:22px;
cursor:pointer;
color:#888;
"×
</button>
</div><div
style="
color:#888;
font-size:12px;
margin-bottom:5px;
"预选卡号
</div><div
style="
font-size:19px;
font-weight:600;
margin-bottom:16px;
word-break:break-all;
user-select:text;
"${escapeHtml(cardNo)}
</div><div
style="
color:#888;
font-size:12px;
margin-bottom:5px;
"制卡进度
</div><div
style="
font-size:17px;
font-weight:600;
margin-bottom:5px;
"${escapeHtml(statusText)}
</div><div
style="
color:#999;
font-size:12px;
margin-bottom:16px;
"状态码:${escapeHtml(statusCode)}
</div><button
id="__boc_copy__"
style="
width:100%;
border:0;
border-radius:8px;
padding:10px;
background:#b30019;
color:#fff;
cursor:pointer;
"复制卡号
</button>
`;const closeButton =
panel.querySelector(
'#__boc_close__'
);closeButton.onclick = function () {
panel.remove();
};const copyButton =
panel.querySelector(
'#__boc_copy__'
);copyButton.onclick = async function () {
try {
await navigator.clipboard.writeText(
cardNo
);copyButton.textContent =
'✓ 已复制';setTimeout(() => {
copyButton.textContent =
'复制卡号';
}, 1200);} catch (error) {
prompt(
'请手动复制卡号:',
cardNo
);
}
};
}function check() {
const info =
readRecordInfo();/*
* 页面还在登录、验证码、
* 填表等阶段时什么都不做。
*/
if (!info) {
return;
}const cardNo =
String(
info.cardNo ?? ''
).trim();const statusCode =
String(
info.mkcrdProgreSts ?? ''
).trim();/*
* 没有读取到任何有效内容,
* 继续等待。
*/
if (!cardNo && !statusCode) {
return;
}/*
* 内容没变化时不碰 DOM。
*/
if (
cardNo === lastCardNo &&
statusCode === lastStatus
) {
return;
}lastCardNo =
cardNo;lastStatus =
statusCode;console.log(
'[BOC] 预选卡号:',
cardNo
);console.log(
'[BOC] 制卡状态:',
statusCode,
STATUS_MAP[statusCode] || '未知'
);console.log(
'[BOC] recordInfo:',
info
);showInfo(
cardNo || '未获取到',
statusCode
);
}/*
* 重点:
*
* 不使用 MutationObserver。
* 不监听页面 DOM 更新。
*
* 只每秒进行一次只读检查。
*/
setInterval(
check,
1000
);/*
* 页面加载后先检查一次。
*/
setTimeout(
check,
1500
);})();
