let bleDevice; let gattServer; let epdService; let rxtxService; let epdCharacteristic; let rxtxCharacteristic; let reconnectTrys = 0; const my_step = 480; function delay(delayInMs) { return new Promise(resolve => { setTimeout(() => { resolve(2); }, delayInMs); }); } function resetVariables() { gattServer = null; epdService = null; epdCharacteristic = null; rxtxCharacteristic = null; rxtxService = null; document.getElementById("log").value = ''; } async function handleError(error) { console.log(error); resetVariables(); if (bleDevice == null) return; if (reconnectTrys <= 5) { reconnectTrys++; await connect(); } else { addLog("Was not able to connect, aborting"); reconnectTrys = 0; } } async function sendCommand(cmd) { if (epdCharacteristic) { await epdCharacteristic.writeValueWithResponse(cmd) } else { addLog('服务不可用。蓝牙链接上了吗?') } } async function clearScreen(cmd) { addLog('刷屏') await triggerEpdCmd(`00${cmd}`); await triggerEpdCmd('01') } async function rxTxSendCommand(cmd) { if (rxtxCharacteristic) { await rxtxCharacteristic.writeValueWithResponse(cmd); //addLog(`✅ [RXTX发送] 已发送 ${cmd.length} 字节`); // 可选:等待100ms后读取响应 setTimeout(async () => { try { const value = await rxtxCharacteristic.readValue(); if (value && value.byteLength > 0) { const formatted = formatReceivedData(value); addLog(`📥 [RXTX响应] ${formatted}`); const rxtxRxDiv = document.getElementById('rxtxRxData'); if (rxtxRxDiv) { rxtxRxDiv.innerHTML = `📎 读取响应:\n${formatted}`; } } } catch(e) { // 忽略读取失败(可能设备没有返回数据) } }, 100); } else { addLog('服务不可用。蓝牙链接上了吗?'); } } async function SendCommand(cmd) { let code; for (let i; i < cmd.length; i += 2) { code = '' + cmd[i] + cmd[i + 1]; triggerRxTxCmd(code); await delay(1000); } } async function rxTxSendCommand2(cmd) { if (rxtxCharacteristic) { await rxtxCharacteristic.writeValueWith(cmd); } else { addLog('服务不可用。蓝牙链接上了吗?') } } async function sendBufferData(value, type) { addLog(`开始发送图片模式:${type}, 大小 ${value.length}byte`); let code = 'ff'; if (type === 'bwr') { code = '00'; } let cod = '03'; if (value.length == 7000 || value.length == 18000) { cod = '04'; } const step = my_step; let partIndex = 0; for (let i = 0; i < value.length; i += step) { addLog(`正在发送第${partIndex + 1}块. 块大小: ${step / 2 + 4}byte. 起始位置: ${i / 2}`); await sendCommand(hexToBytes(cod + code + intToHex(i / 2, 2) + value.substring(i, i + step))); partIndex += 1; } } function updateCanvasSize() { const sizeSelect = document.getElementById('screen-size'); const canvas = document.getElementById('canvas'); const ctx = canvas.getContext("2d"); let width, height; if (sizeSelect.value == "4.2传图") { width = 400; height = 300; } else if (sizeSelect.value === "2.9传图") { width = 296; height =128; } else if (sizeSelect.value === "日历小图") { width = 280; height = 100; } else if (sizeSelect.value === "7.5传图") { width = 800; height = 480; } else if (sizeSelect.value === "7.5日历小图") { width = 400; height = 180; } else if (sizeSelect.value === "2.13传图") { width = 212; height =128; }else if (sizeSelect.value === "2.13高分传图") { width = 250; height =128; } canvas.width = width; canvas.height = height; ctx.fillStyle = 'white'; ctx.fillRect(0, 0, width, height); update_image(); addLog(`画布尺寸已更新为: ${width}x${height}`); } async function upload_image() { const canvas = document.getElementById('canvas'); const startTime = new Date().getTime(); if(canvas.width==296){ await sendBufferData(bytesToHex(canvas2bytes_bw(canvas)), 'bw') await sendBufferData(bytesToHex(canvas2bytes_bw(canvas, 'bwr')), 'bwr') }else if(canvas.width==250 ||canvas.width==212){ await sendBufferData(bytesToHex(canvas2bytes_bw(canvas)), 'bw') }else{ await sendBufferData(bytesToHex(canvas2bytes(canvas)), 'bw') await sendBufferData(bytesToHex(canvas2bytes(canvas, 'bwr')), 'bwr') } await delay(300); if (canvas.width == 280 || canvas.height == 180) { await sendCommand(hexToBytes("AA")) } else { await sendCommand(hexToBytes("01")) } addLog(`上传完成,耗时${(new Date().getTime() - startTime) / 1000}s`); } async function update_imagemb(imageSource) { if (imageSource){ const canvas = document.getElementById("unifiedCanvas"); const ctx = canvas.getContext("2d"); const image = new Image(); image.src = imageSource; image.onload = function (event) { URL.revokeObjectURL(this.src); currentImage = image; drawImageWithRotation(image); applyImageAdjustments(canvas); convert_dithering(canvas); } return; } } function resetAll_mb() { brightnessSlider.value = '-30'; contrastSlider.value = '100'; saturationSlider.value = '100'; diffusionSlider.value = '0'; // 更新显示数值 brightnessValue.textContent = -30; contrastValue.textContent = 100; saturationValue.textContent = 100; diffusionValue.textContent = 0; const canvas = document.getElementById('unifiedCanvas'); applyImageAdjustments(canvas); } function resetAll_mb2() { brightnessSlider.value = '0'; contrastSlider.value = '100'; saturationSlider.value = '100'; diffusionSlider.value = '0'; // 更新显示数值 brightnessValue.textContent = 0; contrastValue.textContent = 100; saturationValue.textContent = 100; diffusionValue.textContent = 0; const canvas = document.getElementById('unifiedCanvas'); applyImageAdjustments(canvas); } async function upload_image_moban(bat) { const canvas = document.getElementById('unifiedCanvas'); resetAll_mb(); cmd='EA0'+bat; await rxTxSendCommand(hexToBytes(cmd)); const startTime = new Date().getTime(); if(canvas.width==296){ await sendBufferData(bytesToHex(canvas2bytes_bw(canvas)), 'bw') await sendBufferData(bytesToHex(canvas2bytes_bw(canvas, 'bwr')), 'bwr')} else { await sendBufferData(bytesToHex(canvas2bytes(canvas)), 'bw') await sendBufferData(bytesToHex(canvas2bytes(canvas, 'bwr')), 'bwr')} resetAll_mb2(); resetAll(); await delay(300); await sendCommand(hexToBytes("01")); addLog(`上传完成,耗时${(new Date().getTime() - startTime) / 1000}s`); } async function upload_image_lb(cmd) { cmd='EA0'+cmd; await rxTxSendCommand(hexToBytes(cmd)); upload_image(); } async function upload_image_lb_num(cmd) { if(cmd>4)cmd=4; if(cmd<1)cmd=1; addLog(`轮播数量已更新为: ${cmd}个!`); cmd=cmd-1; cmd='EA000'+cmd; await rxTxSendCommand(hexToBytes(cmd)); addLog(`轮播数量更新成功!`); } async function setTime() { const { unixNow, localeTimeString, year, month, day, week } = getUnixTime(); addLog("时间设置为: " + localeTimeString + " : dd" + intToHex(unixNow, 4)); await rxTxSendCommand(hexToBytes('dd' + [intToHex(unixNow, 4), intToHex(year, 2), intToHex(month, 1), intToHex(day, 1), intToHex(week, 1)].join(''))); await rxTxSendCommand(hexToBytes('e2')) } const chinaCities = { "北京": "101010100", "海淀": "101010200", "朝阳": "101010300", "顺义": "101010400", "怀柔": "101010500", "通州": "101010600", "昌平": "101010700", "延庆": "101010800", "丰台": "101010900", "石景山": "101011000", "大兴": "101011100", "房山": "101011200", "密云": "101011300", "门头沟": "101011400", "平谷": "101011500", "东城": "101011600", "西城": "101011700", "上海": "101020100", "闵行": "101020200", "宝山": "101020300", "黄浦": "101020400", "嘉定": "101020500", "浦东新区": "101020600", "金山": "101020700", "青浦": "101020800", "松江": "101020900", "奉贤": "101021000", "崇明": "101021100", "徐汇": "101021200", "长宁": "101021300", "静安": "101021400", "普陀": "101021500", "虹口": "101021600", "杨浦": "101021700", "天津": "101030100", "武清": "101030200", "宝坻": "101030300", "东丽": "101030400", "西青": "101030500", "北辰": "101030600", "宁河": "101030700", "和平": "101030800", "静海": "101030900", "津南": "101031000", "滨海新区": "101031100", "河东": "101031200", "河西": "101031300", "蓟州": "101031400", "南开": "101031500", "河北": "101031600", "红桥": "101031700", "重庆": "101040100", "永川": "101040200", "合川": "101040300", "南川": "101040400", "江津": "101040500", "北碚": "101040800", "巴南": "101040900", "长寿": "101041000", "黔江": "101041100", "渝中": "101041200", "万州": "101041300", "涪陵": "101041400", "城口": "101041600", "云阳": "101041700", "巫溪": "101041800", "奉节": "101041900", "巫山": "101042000", "潼南": "101042100", "垫江": "101042200", "梁平": "101042300", "忠县": "101042400", "石柱": "101042500", "大足": "101042600", "荣昌": "101042700", "铜梁": "101042800", "璧山": "101042900", "丰都": "101043000", "武隆": "101043100", "彭水": "101043200", "綦江": "101043300", "酉阳": "101043400", "大渡口": "101043500", "秀山": "101043600", "沙坪坝": "101043800", "九龙坡": "101043900", "南岸": "101044000", "开州": "101044100", "两江新区": "101044200", "哈尔滨": "101050101", "双城": "101050102", "呼兰": "101050103", "阿城": "101050104", "宾县": "101050105", "依兰": "101050106", "巴彦": "101050107", "通河": "101050108", "方正": "101050109", "延寿": "101050110", "尚志": "101050111", "五常": "101050112", "木兰": "101050113", "道里": "101050114", "南岗": "101050115", "道外": "101050116", "平房": "101050117", "松北": "101050118", "香坊": "101050119", "齐齐哈尔": "101050201", "讷河": "101050202", "龙江": "101050203", "甘南": "101050204", "富裕": "101050205", "依安": "101050206", "拜泉": "101050207", "克山": "101050208", "克东": "101050209", "泰来": "101050210", "龙沙": "101050211", "建华": "101050212", "铁锋": "101050213", "昂昂溪": "101050214", "富拉尔基": "101050215", "碾子山": "101050216", "梅里斯": "101050217", "牡丹江": "101050301", "海林": "101050302", "穆棱": "101050303", "林口": "101050304", "绥芬河": "101050305", "宁安": "101050306", "东宁": "101050307", "东安": "101050308", "阳明": "101050309", "爱民": "101050310", "西安": "101050311", "佳木斯": "101050401", "汤原": "101050402", "抚远": "101050403", "桦川": "101050404", "桦南": "101050405", "同江": "101050406", "富锦": "101050407", "向阳": "101050408", "前进": "101050409", "东风": "101050410", "郊区": "101050411", "绥化": "101050501", "肇东": "101050502", "安达": "101050503", "海伦": "101050504", "明水": "101050505", "望奎": "101050506", "兰西": "101050507", "青冈": "101050508", "庆安": "101050509", "绥棱": "101050510", "北林": "101050511", "黑河": "101050601", "嫩江": "101050602", "孙吴": "101050603", "逊克": "101050604", "五大连池": "101050605", "北安": "101050606", "爱辉": "101050607", "大兴安岭": "101050701", "塔河": "101050702", "漠河": "101050703", "呼玛": "101050704", "加格达奇区": "101050708", "伊春": "101050801", "铁力": "101050804", "嘉荫": "101050805", "南岔": "101050806", "友好": "101050807", "金林": "101050808", "伊美": "101050811", "乌翠": "101050813", "汤旺县": "101050814", "大箐山县": "101050815", "丰林": "101050816", "大庆": "101050901", "林甸": "101050902", "肇州": "101050903", "肇源": "101050904", "杜尔伯特": "101050905", "萨尔图": "101050906", "龙凤": "101050907", "让胡路": "101050908", "红岗": "101050909", "大同": "101050910", "新兴": "101051001", "七台河": "101051002", "勃利": "101051003", "桃山": "101051004", "茄子河": "101051005", "鸡西": "101051101", "虎林": "101051102", "密山": "101051103", "鸡东": "101051104", "鸡冠": "101051105", "恒山": "101051106", "滴道": "101051107", "梨树": "101051108", "城子河": "101051109", "麻山": "101051110", "鹤岗": "101051201", "绥滨": "101051202", "萝北": "101051203", "向阳": "101051204", "工农": "101051205", "南山": "101051206", "兴安": "101051207", "东山": "101051208", "兴山": "101051209", "双鸭山": "101051301", "集贤": "101051302", "宝清": "101051303", "饶河": "101051304", "友谊": "101051305", "尖山": "101051306", "岭东": "101051307", "四方台": "101051308", "宝山": "101051309", "长春": "101060101", "农安": "101060102", "德惠": "101060103", "九台": "101060104", "榆树": "101060105", "双阳": "101060106", "二道": "101060107", "南关": "101060108", "宽城": "101060109", "朝阳": "101060110", "绿园": "101060111", "吉林": "101060201", "舒兰": "101060202", "永吉": "101060203", "蛟河": "101060204", "磐石": "101060205", "桦甸": "101060206", "昌邑": "101060207", "龙潭": "101060208", "船营": "101060209", "丰满": "101060210", "延吉": "101060301", "敦化": "101060302", "安图": "101060303", "汪清": "101060304", "和龙": "101060305", "延边": "101060306", "龙井": "101060307", "珲春": "101060308", "图们": "101060309", "四平": "101060401", "双辽": "101060402", "梨树": "101060403", "公主岭": "101060404", "伊通": "101060405", "铁西": "101060406", "铁东": "101060407", "通化": "101060501", "梅河口": "101060502", "柳河": "101060503", "辉南": "101060504", "集安": "101060505", "通化县": "101060506", "东昌": "101060507", "二道江": "101060508", "白城": "101060601", "洮南": "101060602", "大安": "101060603", "镇赉": "101060604", "通榆": "101060605", "洮北": "101060606", "辽源": "101060701", "东丰": "101060702", "东辽": "101060703", "龙山": "101060704", "西安": "101060705", "松原": "101060801", "乾安": "101060802", "前郭": "101060803", "长岭": "101060804", "扶余": "101060805", "宁江": "101060806", "白山": "101060901", "靖宇": "101060902", "临江": "101060903", "长白": "101060905", "抚松": "101060906", "江源": "101060907", "浑江": "101060908", "沈阳": "101070101", "浑南": "101070102", "辽中": "101070103", "康平": "101070104", "法库": "101070105", "新民": "101070106", "和平": "101070107", "沈河": "101070108", "大东": "101070109", "皇姑": "101070110", "铁西": "101070111", "苏家屯": "101070112", "沈北新区": "101070113", "于洪": "101070114", "大连": "101070201", "瓦房店": "101070202", "金州": "101070203", "普兰店": "101070204", "旅顺": "101070205", "长海": "101070206", "庄河": "101070207", "中山": "101070208", "西岗": "101070209", "沙河口": "101070210", "甘井子": "101070211", "鞍山": "101070301", "台安": "101070302", "岫岩": "101070303", "海城": "101070304", "铁东": "101070305", "铁西": "101070306", "立山": "101070307", "千山": "101070308", "抚顺": "101070401", "新宾": "101070402", "清原": "101070403", "新抚": "101070405", "东洲": "101070406", "望花": "101070407", "顺城": "101070408", "抚顺县": "101070409", "本溪": "101070501", "本溪县": "101070502", "平山": "101070503", "桓仁": "101070504", "溪湖": "101070505", "明山": "101070506", "南芬": "101070507", "丹东": "101070601", "凤城": "101070602", "宽甸": "101070603", "东港": "101070604", "元宝": "101070605", "振兴": "101070606", "振安": "101070607", "锦州": "101070701", "凌海": "101070702", "古塔": "101070703", "义县": "101070704", "黑山": "101070705", "北镇": "101070706", "凌河": "101070707", "太和": "101070708", "营口": "101070801", "大石桥": "101070802", "盖州": "101070803", "站前": "101070804", "西市": "101070805", "鲅鱼圈": "101070806", "老边": "101070807", "阜新": "101070901", "彰武": "101070902", "海州": "101070903", "新邱": "101070904", "太平": "101070905", "清河门": "101070906", "细河": "101070907", "阜新县": "101070908", "辽阳": "101071001", "辽阳县": "101071002", "灯塔": "101071003", "弓长岭": "101071004", "白塔": "101071005", "文圣": "101071006", "宏伟": "101071007", "太子河": "101071008", "铁岭": "101071101", "开原": "101071102", "昌图": "101071103", "西丰": "101071104", "调兵山": "101071105", "银州": "101071106", "清河": "101071107", "铁岭县": "101071108", "朝阳": "101071201", "双塔": "101071202", "凌源": "101071203", "喀左": "101071204", "北票": "101071205", "龙城": "101071206", "建平县": "101071207", "朝阳县": "101071208", "盘锦": "101071301", "大洼": "101071302", "盘山": "101071303", "双台子": "101071304", "兴隆台": "101071305", "葫芦岛": "101071401", "建昌": "101071402", "绥中": "101071403", "兴城": "101071404", "连山": "101071405", "龙港": "101071406", "南票": "101071407", "呼和浩特": "101080101", "土左旗": "101080102", "托克托": "101080103", "和林": "101080104", "清水河": "101080105", "赛罕": "101080106", "武川": "101080107", "新城": "101080108", "回民": "101080109", "玉泉": "101080110", "包头": "101080201", "白云鄂博": "101080202", "土右旗": "101080204", "固阳": "101080205", "达茂旗": "101080206", "东河": "101080208", "昆都仑": "101080209", "青山": "101080210", "石拐": "101080211", "九原": "101080212", "乌海": "101080301", "海勃湾": "101080302", "海南": "101080303", "乌达": "101080304", "集宁": "101080401", "卓资": "101080402", "化德": "101080403", "商都": "101080404", "乌兰察布": "101080405", "兴和": "101080406", "凉城": "101080407", "察右前旗": "101080408", "察右中旗": "101080409", "察右后旗": "101080410", "四子王旗": "101080411", "丰镇": "101080412", "通辽": "101080501", "科左中旗": "101080503", "科左后旗": "101080504", "开鲁": "101080506", "库伦": "101080507", "奈曼": "101080508", "扎鲁特": "101080509", "科尔沁": "101080510", "霍林郭勒": "101080512", "赤峰": "101080601", "红山": "101080602", "阿鲁旗": "101080603", "巴林左旗": "101080605", "巴林右旗": "101080606", "林西": "101080607", "克什克腾": "101080608", "翁牛特": "101080609", "喀喇沁": "101080611", "宁城": "101080613", "敖汉": "101080614", "元宝山": "101080616", "松山": "101080617", "鄂尔多斯": "101080701", "达拉特": "101080703", "准格尔": "101080704", "鄂前旗": "101080705", "鄂托克": "101080708", "杭锦旗": "101080709", "乌审旗": "101080710", "伊金霍洛": "101080711", "东胜": "101080713", "康巴什": "101080714", "临河": "101080801", "五原": "101080802", "磴口": "101080803", "乌前旗": "101080804", "乌中旗": "101080806", "乌后旗": "101080807", "杭锦后旗": "101080810", "巴彦淖尔": "101080811", "锡林浩特": "101080901", "锡林郭勒": "101080902", "二连浩特": "101080903", "阿巴嘎": "101080904", "苏左旗": "101080906", "苏右旗": "101080907", "东乌旗": "101080909", "西乌旗": "101080910", "太仆寺": "101080911", "镶黄旗": "101080912", "正镶白旗": "101080913", "正蓝旗": "101080914", "多伦": "101080915", "海拉尔": "101081001", "阿荣旗": "101081003", "莫力达瓦": "101081004", "鄂伦春旗": "101081005", "鄂温克旗": "101081006", "陈旗": "101081007", "新左旗": "101081008", "新右旗": "101081009", "满洲里": "101081010", "牙克石": "101081011", "扎兰屯": "101081012", "呼伦贝尔": "101081013", "额尔古纳": "101081014", "根河": "101081015", "扎赉诺尔": "101081017", "乌兰浩特": "101081101", "阿尔山": "101081102", "科右中旗": "101081103", "扎赉特": "101081105", "突泉": "101081107", "兴安盟": "101081108", "科右前旗": "101081109", "阿左旗": "101081201", "阿右旗": "101081202", "额济纳": "101081203", "阿拉善盟": "101081213", "石家庄": "101090101", "井陉": "101090102", "正定": "101090103", "栾城": "101090104", "行唐": "101090105", "灵寿": "101090106", "高邑": "101090107", "深泽": "101090108", "赞皇": "101090109", "无极": "101090110", "平山": "101090111", "元氏": "101090112", "赵县": "101090113", "辛集": "101090114", "藁城": "101090115", "晋州": "101090116", "新乐": "101090117", "鹿泉": "101090118", "长安": "101090119", "桥西": "101090120", "新华": "101090121", "井陉矿区": "101090122", "裕华": "101090123", "保定": "101090201", "满城": "101090202", "阜平": "101090203", "徐水": "101090204", "唐县": "101090205", "高阳": "101090206", "竞秀": "101090208", "涞源": "101090209", "望都": "101090210", "易县": "101090212", "莲池": "101090213", "曲阳": "101090214", "蠡县": "101090215", "顺平": "101090216", "涿州": "101090218", "定州": "101090219", "安国": "101090220", "高碑店": "101090221", "涞水": "101090222", "定兴": "101090223", "清苑": "101090224", "博野": "101090225", "张家口": "101090301", "宣化": "101090302", "张北": "101090303", "康保": "101090304", "沽源": "101090305", "尚义": "101090306", "蔚县": "101090307", "阳原": "101090308", "怀安": "101090309", "万全": "101090310", "怀来": "101090311", "涿鹿": "101090312", "赤城": "101090313", "崇礼": "101090314", "桥东": "101090315", "桥西": "101090316", "下花园": "101090317", "双桥": "101090401", "承德": "101090402", "承德县": "101090403", "兴隆": "101090404", "平泉": "101090405", "滦平": "101090406", "隆化": "101090407", "丰宁": "101090408", "宽城": "101090409", "围场": "101090410", "双滦": "101090411", "鹰手营子矿": "101090412", "唐山": "101090501", "丰南": "101090502", "丰润": "101090503", "滦州": "101090504", "滦南": "101090505", "乐亭": "101090506", "迁西": "101090507", "玉田": "101090508", "曹妃甸": "101090509", "遵化": "101090510", "迁安": "101090511", "路南": "101090513", "路北": "101090514", "古冶": "101090515", "开平": "101090516", "廊坊": "101090601", "固安": "101090602", "永清": "101090603", "香河": "101090604", "大城": "101090605", "文安": "101090606", "大厂": "101090607", "霸州": "101090608", "三河": "101090609", "安次": "101090610", "广阳": "101090611", "沧州": "101090701", "青县": "101090702", "东光": "101090703", "海兴": "101090704", "盐山": "101090705", "肃宁": "101090706", "南皮": "101090707", "吴桥": "101090708", "献县": "101090709", "孟村": "101090710", "泊头": "101090711", "任丘": "101090712", "黄骅": "101090713", "河间": "101090714", "新华": "101090715", "沧县": "101090716", "运河": "101090717", "衡水": "101090801", "枣强": "101090802", "武邑": "101090803", "武强": "101090804", "饶阳": "101090805", "安平": "101090806", "故城": "101090807", "景县": "101090808", "阜城": "101090809", "冀州": "101090810", "深州": "101090811", "桃城": "101090812", "邢台": "101090901", "临城": "101090902", "襄都": "101090903", "内丘": "101090904", "柏乡": "101090905", "隆尧": "101090906", "南和": "101090907", "宁晋": "101090908", "巨鹿": "101090909", "新河": "101090910", "广宗": "101090911", "平乡": "101090912", "威县": "101090913", "清河": "101090914", "临西": "101090915", "南宫": "101090916", "沙河": "101090917", "任泽": "101090918", "信都": "101090919", "邯郸": "101091001", "峰峰": "101091002", "临漳": "101091003", "成安": "101091004", "大名": "101091005", "涉县": "101091006", "磁县": "101091007", "肥乡": "101091008", "永年": "101091009", "邱县": "101091010", "鸡泽": "101091011", "广平": "101091012", "馆陶": "101091013", "魏县": "101091014", "曲周": "101091015", "武安": "101091016", "邯山": "101091017", "丛台": "101091018", "复兴": "101091019", "秦皇岛": "101091101", "青龙": "101091102", "昌黎": "101091103", "抚宁": "101091104", "卢龙": "101091105", "北戴河": "101091106", "海港": "101091107", "山海关": "101091108", "雄安新区": "101091201", "容城": "101091202", "安新": "101091203", "雄县": "101091204", "太原": "101100101", "清徐": "101100102", "阳曲": "101100103", "娄烦": "101100104", "古交": "101100105", "尖草坪区": "101100106", "小店区": "101100107", "迎泽": "101100108", "杏花岭": "101100109", "万柏林": "101100110", "晋源": "101100111", "大同": "101100201", "阳高": "101100202", "云州": "101100203", "天镇": "101100204", "广灵": "101100205", "灵丘": "101100206", "浑源": "101100207", "左云": "101100208", "云冈": "101100209", "新荣": "101100211", "平城": "101100214", "阳泉": "101100301", "盂县": "101100302", "平定": "101100303", "矿区": "101100304", "郊区": "101100305", "城区": "101100306", "晋中": "101100401", "榆次": "101100402", "榆社": "101100403", "左权": "101100404", "和顺": "101100405", "昔阳": "101100406", "寿阳": "101100407", "太谷": "101100408", "祁县": "101100409", "平遥": "101100410", "灵石": "101100411", "介休": "101100412", "长治": "101100501", "黎城": "101100502", "屯留": "101100503", "潞城": "101100504", "襄垣": "101100505", "平顺": "101100506", "武乡": "101100507", "沁县": "101100508", "长子": "101100509", "沁源": "101100510", "壶关": "101100511", "潞州": "101100512", "上党": "101100513", "晋城": "101100601", "沁水": "101100602", "阳城": "101100603", "陵川": "101100604", "高平": "101100605", "泽州": "101100606", "城区": "101100607", "临汾": "101100701", "曲沃": "101100702", "永和": "101100703", "隰县": "101100704", "大宁": "101100705", "吉县": "101100706", "襄汾": "101100707", "蒲县": "101100708", "汾西": "101100709", "洪洞": "101100710", "霍州": "101100711", "乡宁": "101100712", "翼城": "101100713", "侯马": "101100714", "浮山": "101100715", "安泽": "101100716", "古县": "101100717", "尧都": "101100718", "运城": "101100801", "临猗": "101100802", "稷山": "101100803", "万荣": "101100804", "河津": "101100805", "新绛": "101100806", "绛县": "101100807", "闻喜": "101100808", "垣曲": "101100809", "永济": "101100810", "芮城": "101100811", "夏县": "101100812", "平陆": "101100813", "盐湖": "101100814", "朔州": "101100901", "平鲁": "101100902", "山阴": "101100903", "右玉": "101100904", "应县": "101100905", "怀仁": "101100906", "朔城": "101100907", "忻州": "101101001", "定襄": "101101002", "五台县": "101101003", "河曲": "101101004", "偏关": "101101005", "神池": "101101006", "宁武": "101101007", "代县": "101101008", "繁峙": "101101009", "保德": "101101011", "静乐": "101101012", "岢岚": "101101013", "五寨": "101101014", "原平": "101101015", "忻府": "101101016", "吕梁": "101101100", "离石": "101101101", "临县": "101101102", "兴县": "101101103", "岚县": "101101104", "柳林": "101101105", "石楼": "101101106", "方山": "101101107", "交口": "101101108", "中阳": "101101109", "孝义": "101101110", "汾阳": "101101111", "文水": "101101112", "交城": "101101113", "西安": "101110101", "长安": "101110102", "临潼": "101110103", "蓝田": "101110104", "周至": "101110105", "鄠邑": "101110106", "高陵": "101110107", "新城": "101110108", "碑林": "101110109", "莲湖": "101110110", "灞桥": "101110111", "未央": "101110112", "雁塔": "101110113", "阎良": "101110114", "咸阳": "101110200", "三原": "101110201", "礼泉": "101110202", "永寿": "101110203", "淳化": "101110204", "泾阳": "101110205", "武功": "101110206", "乾县": "101110207", "彬州": "101110208", "长武": "101110209", "旬邑": "101110210", "兴平": "101110211", "秦都": "101110212", "渭城": "101110213", "延安": "101110300", "延长": "101110301", "延川": "101110302", "子长": "101110303", "宜川": "101110304", "富县": "101110305", "志丹": "101110306", "安塞": "101110307", "甘泉": "101110308", "洛川": "101110309", "黄陵": "101110310", "黄龙": "101110311", "吴起": "101110312", "宝塔": "101110313", "榆林": "101110401", "府谷": "101110402", "神木": "101110403", "佳县": "101110404", "定边": "101110405", "靖边": "101110406", "横山": "101110407", "米脂": "101110408", "子洲": "101110409", "绥德": "101110410", "吴堡": "101110411", "清涧": "101110412", "榆阳": "101110413", "渭南": "101110501", "潼关": "101110503", "大荔": "101110504", "白水": "101110505", "富平": "101110506", "蒲城": "101110507", "澄城": "101110508", "合阳": "101110509", "韩城": "101110510", "华阴": "101110511", "临渭": "101110512", "华州": "101110513", "商洛": "101110601", "洛南": "101110602", "柞水": "101110603", "商州": "101110604", "镇安": "101110605", "丹凤": "101110606", "商南": "101110607", "山阳": "101110608", "安康": "101110701", "紫阳": "101110702", "石泉": "101110703", "汉阴": "101110704", "旬阳": "101110705", "岚皋": "101110706", "平利": "101110707", "白河": "101110708", "镇坪": "101110709", "宁陕": "101110710", "汉滨": "101110711", "汉中": "101110801", "略阳": "101110802", "勉县": "101110803", "留坝": "101110804", "洋县": "101110805", "城固": "101110806", "西乡": "101110807", "佛坪": "101110808", "宁强": "101110809", "南郑": "101110810", "镇巴": "101110811", "汉台": "101110812", "宝鸡": "101110901", "渭滨": "101110902", "千阳": "101110903", "麟游": "101110904", "岐山": "101110905", "凤翔": "101110906", "扶风": "101110907", "眉县": "101110908", "太白": "101110909", "凤县": "101110910", "陇县": "101110911", "陈仓": "101110912", "金台": "101110913", "铜川": "101111001", "宜君": "101111003", "耀州": "101111004", "王益": "101111005", "印台": "101111006", "杨陵": "101111102", "济南": "101120101", "长清": "101120102", "商河": "101120103", "章丘": "101120104", "平阴": "101120105", "济阳": "101120106", "历下": "101120107", "市中": "101120108", "槐荫": "101120109", "天桥": "101120110", "历城": "101120111", "青岛": "101120201", "崂山": "101120202", "市南": "101120203", "即墨": "101120204", "胶州": "101120205", "黄岛": "101120206", "莱西": "101120207", "平度": "101120208", "市北": "101120209", "李沧": "101120210", "城阳": "101120211", "淄博": "101120301", "淄川": "101120302", "博山": "101120303", "高青": "101120304", "周村": "101120305", "沂源": "101120306", "桓台": "101120307", "临淄": "101120308", "张店": "101120309", "德州": "101120401", "武城": "101120402", "临邑": "101120403", "齐河": "101120405", "乐陵": "101120406", "庆云": "101120407", "平原": "101120408", "宁津": "101120409", "夏津": "101120410", "禹城": "101120411", "德城": "101120412", "陵城": "101120413", "烟台": "101120501", "莱州": "101120502", "蓬莱": "101120504", "龙口": "101120505", "招远": "101120506", "栖霞": "101120507", "福山": "101120508", "牟平": "101120509", "莱阳": "101120510", "海阳": "101120511", "芝罘": "101120512", "莱山": "101120513", "潍坊": "101120601", "青州": "101120602", "寿光": "101120603", "临朐": "101120604", "昌乐": "101120605", "昌邑": "101120606", "安丘": "101120607", "高密": "101120608", "诸城": "101120609", "潍城": "101120610", "寒亭": "101120611", "坊子": "101120612", "奎文": "101120613", "济宁": "101120701", "嘉祥": "101120702", "微山": "101120703", "鱼台": "101120704", "兖州": "101120705", "金乡": "101120706", "汶上": "101120707", "泗水": "101120708", "梁山": "101120709", "曲阜": "101120710", "邹城": "101120711", "任城": "101120712", "泰安": "101120801", "新泰": "101120802", "泰山": "101120803", "肥城": "101120804", "东平": "101120805", "宁阳": "101120806", "岱岳": "101120807", "临沂": "101120901", "莒南": "101120902", "沂南": "101120903", "兰陵": "101120904", "临沭": "101120905", "郯城": "101120906", "蒙阴": "101120907", "平邑": "101120908", "费县": "101120909", "沂水": "101120910", "兰山": "101120911", "罗庄": "101120912", "河东": "101120913", "菏泽": "101121001", "鄄城": "101121002", "郓城": "101121003", "东明": "101121004", "定陶": "101121005", "巨野": "101121006", "曹县": "101121007", "成武": "101121008", "单县": "101121009", "牡丹": "101121010", "滨州": "101121101", "博兴": "101121102", "无棣": "101121103", "阳信": "101121104", "惠民": "101121105", "沾化": "101121106", "邹平": "101121107", "滨城": "101121108", "东营": "101121201", "河口": "101121202", "垦利": "101121203", "利津": "101121204", "广饶": "101121205", "东营区": "101121206", "威海": "101121301", "文登": "101121302", "荣成": "101121303", "乳山": "101121304", "环翠": "101121307", "枣庄": "101121401", "薛城": "101121402", "峄城": "101121403", "台儿庄": "101121404", "滕州": "101121405", "市中": "101121406", "山亭": "101121407", "日照": "101121501", "五莲": "101121502", "莒县": "101121503", "东港": "101121504", "岚山": "101121505", "莱芜": "101121601", "钢城": "101121603", "聊城": "101121701", "冠县": "101121702", "阳谷": "101121703", "高唐": "101121704", "茌平": "101121705", "东阿": "101121706", "临清": "101121707", "东昌府": "101121708", "莘县": "101121709", "乌鲁木齐": "101130101", "天山": "101130102", "沙依巴克": "101130104", "达坂城": "101130105", "新市": "101130106", "水磨沟": "101130107", "头屯河": "101130111", "米东": "101130112", "乌鲁木齐县": "101130113", "克拉玛依": "101130201", "乌尔禾": "101130202", "白碱滩": "101130203", "独山子": "101130204", "克拉玛依区": "101130205", "石河子": "101130301", "昌吉": "101130401", "呼图壁": "101130402", "阜康": "101130404", "吉木萨尔": "101130405", "奇台": "101130406", "玛纳斯": "101130407", "木垒": "101130408", "昌吉市": "101130410", "吐鲁番": "101130501", "托克逊": "101130502", "高昌": "101130503", "鄯善": "101130504", "库尔勒": "101130601", "轮台": "101130602", "尉犁": "101130603", "若羌": "101130604", "且末": "101130605", "和静": "101130606", "焉耆": "101130607", "和硕": "101130608", "巴音郭楞": "101130609", "博湖": "101130612", "阿拉尔": "101130701", "阿克苏": "101130801", "乌什": "101130802", "温宿": "101130803", "拜城": "101130804", "新和": "101130805", "沙雅": "101130806", "库车": "101130807", "柯坪": "101130808", "阿瓦提": "101130809", "阿克苏市": "101130810", "喀什地区": "101130901", "英吉沙": "101130902", "塔什库尔干": "101130903", "麦盖提": "101130904", "莎车": "101130905", "叶城": "101130906", "泽普": "101130907", "巴楚": "101130908", "岳普湖": "101130909", "伽师": "101130910", "疏附": "101130911", "疏勒": "101130912", "喀什市": "101130913", "伊宁": "101131001", "察布查尔": "101131002", "尼勒克": "101131003", "伊宁县": "101131004", "巩留": "101131005", "新源": "101131006", "昭苏": "101131007", "特克斯": "101131008", "霍城": "101131009", "霍尔果斯": "101131010", "奎屯": "101131011", "伊犁": "101131012", "塔城地区": "101131101", "裕民": "101131102", "额敏": "101131103", "和布克赛尔": "101131104", "托里": "101131105", "乌苏": "101131106", "沙湾": "101131107", "塔城市": "101131108", "哈密": "101131201", "伊州": "101131202", "巴里坤": "101131203", "伊吾": "101131204", "和田地区": "101131301", "皮山": "101131302", "策勒": "101131303", "墨玉": "101131304", "洛浦": "101131305", "民丰": "101131306", "于田": "101131307", "和田市": "101131308", "和田县": "101131309", "阿勒泰地区": "101131401", "哈巴河": "101131402", "吉木乃": "101131405", "布尔津": "101131406", "福海": "101131407", "富蕴": "101131408", "青河": "101131409", "阿勒泰市": "101131410", "阿图什": "101131501", "乌恰": "101131502", "阿克陶": "101131503", "阿合奇": "101131504", "克州": "101131505", "博乐": "101131601", "温泉": "101131602", "精河": "101131603", "博尔塔拉": "101131604", "阿拉山口": "101131606", "图木舒克": "101131701", "五家渠": "101131801", "铁门关": "101131901", "昆玉": "101131920", "北屯": "101132101", "双河": "101132201", "可克达拉": "101132301", "胡杨河": "101132401", "新星市": "101132501", "白杨市": "101132601", "拉萨": "101140101", "当雄": "101140102", "尼木": "101140103", "林周": "101140104", "堆龙德庆": "101140105", "曲水": "101140106", "达孜": "101140107", "墨竹工卡": "101140108", "城关": "101140109", "日喀则": "101140201", "拉孜": "101140202", "南木林": "101140203", "聂拉木": "101140204", "定日": "101140205", "江孜": "101140206", "仲巴": "101140208", "萨嘎": "101140209", "吉隆": "101140210", "昂仁": "101140211", "定结": "101140212", "萨迦": "101140213", "谢通门": "101140214", "桑珠孜": "101140215", "岗巴": "101140216", "白朗": "101140217", "亚东": "101140218", "康马": "101140219", "仁布": "101140220", "山南": "101140301", "贡嘎": "101140302", "扎囊": "101140303", "加查": "101140304", "浪卡子": "101140305", "错那": "101140306", "隆子": "101140307", "乃东": "101140309", "桑日": "101140310", "洛扎": "101140311", "措美": "101140312", "琼结": "101140313", "曲松": "101140314", "林芝": "101140401", "波密": "101140402", "米林": "101140403", "察隅": "101140404", "工布江达": "101140405", "朗县": "101140406", "墨脱": "101140407", "巴宜": "101140408", "昌都": "101140501", "丁青": "101140502", "边坝": "101140503", "洛隆": "101140504", "左贡": "101140505", "芒康": "101140506", "类乌齐": "101140507", "八宿": "101140508", "江达": "101140509", "察雅": "101140510", "贡觉": "101140511", "卡若": "101140512", "那曲": "101140601", "尼玛": "101140602", "嘉黎": "101140603", "班戈": "101140604", "安多": "101140605", "索县": "101140606", "聂荣": "101140607", "巴青": "101140608", "比如": "101140609", "双湖": "101140610", "申扎": "101140611", "色尼": "101140612", "阿里地区": "101140701", "改则": "101140702", "普兰": "101140705", "札达": "101140706", "噶尔": "101140707", "日土": "101140708", "革吉": "101140709", "措勤": "101140710", "西宁": "101150101", "大通": "101150102", "湟源": "101150103", "湟中": "101150104", "城东": "101150105", "城中": "101150106", "城西": "101150107", "城北": "101150108", "平安": "101150201", "乐都": "101150202", "民和": "101150203", "互助": "101150204", "化隆": "101150205", "循化": "101150206", "海东": "101150207", "同仁": "101150301", "尖扎": "101150302", "泽库": "101150303", "河南": "101150304", "黄南": "101150305", "共和": "101150401", "海南": "101150402", "贵德": "101150404", "兴海": "101150406", "贵南": "101150407", "同德": "101150408", "玛沁": "101150501", "班玛": "101150502", "甘德": "101150503", "达日": "101150504", "久治": "101150505", "玛多": "101150506", "果洛": "101150507", "玉树州": "101150601", "称多": "101150602", "治多": "101150603", "杂多": "101150604", "囊谦": "101150605", "曲麻莱": "101150606", "玉树市": "101150607", "德令哈": "101150701", "海西": "101150702", "天峻": "101150708", "乌兰": "101150709", "茫崖": "101150712", "大柴旦": "101150713", "格尔木": "101150714", "都兰": "101150715", "海晏": "101150801", "门源": "101150802", "祁连": "101150803", "海北": "101150804", "刚察": "101150806", "兰州": "101160101", "皋兰": "101160102", "永登": "101160103", "榆中": "101160104", "城关": "101160105", "七里河": "101160106", "西固": "101160107", "安宁": "101160108", "红古": "101160109", "定西": "101160201", "通渭": "101160202", "陇西": "101160203", "渭源": "101160204", "临洮": "101160205", "漳县": "101160206", "岷县": "101160207", "安定": "101160208", "平凉": "101160301", "泾川": "101160302", "灵台": "101160303", "崇信": "101160304", "华亭": "101160305", "庄浪": "101160306", "静宁": "101160307", "崆峒": "101160308", "庆阳": "101160401", "西峰": "101160402", "环县": "101160403", "华池": "101160404", "合水": "101160405", "正宁": "101160406", "宁县": "101160407", "镇原": "101160408", "庆城": "101160409", "武威": "101160501", "民勤": "101160502", "古浪": "101160503", "凉州": "101160504", "天祝": "101160505", "金昌": "101160601", "永昌": "101160602", "金川": "101160603", "张掖": "101160701", "肃南": "101160702", "民乐": "101160703", "临泽": "101160704", "高台": "101160705", "山丹": "101160706", "甘州": "101160707", "酒泉": "101160801", "肃州": "101160802", "金塔": "101160803", "阿克塞": "101160804", "瓜州": "101160805", "肃北": "101160806", "玉门": "101160807", "敦煌": "101160808", "天水": "101160901", "秦州": "101160902", "清水": "101160903", "秦安": "101160904", "甘谷": "101160905", "武山": "101160906", "张家川": "101160907", "麦积": "101160908", "武都": "101161001", "成县": "101161002", "文县": "101161003", "宕昌": "101161004", "康县": "101161005", "西和": "101161006", "礼县": "101161007", "徽县": "101161008", "两当": "101161009", "陇南": "101161010", "临夏": "101161101", "康乐": "101161102", "永靖": "101161103", "广河": "101161104", "和政": "101161105", "东乡": "101161106", "积石山": "101161107", "临夏市": "101161108", "临夏县": "101161109", "合作": "101161201", "临潭": "101161202", "卓尼": "101161203", "舟曲": "101161204", "迭部": "101161205", "玛曲": "101161206", "碌曲": "101161207", "夏河": "101161208", "甘南": "101161209", "白银": "101161301", "靖远": "101161302", "会宁": "101161303", "平川": "101161304", "景泰": "101161305", "白银区": "101161306", "嘉峪关": "101161401", "银川": "101170101", "永宁": "101170102", "灵武": "101170103", "贺兰": "101170104", "兴庆": "101170105", "西夏": "101170106", "金凤": "101170107", "石嘴山": "101170201", "惠农": "101170202", "平罗": "101170203", "大武口": "101170205", "吴忠": "101170301", "同心": "101170302", "盐池": "101170303", "利通": "101170304", "红寺堡": "101170305", "青铜峡": "101170306", "固原": "101170401", "西吉": "101170402", "隆德": "101170403", "泾源": "101170404", "原州": "101170405", "彭阳": "101170406", "中卫": "101170501", "中宁": "101170502", "沙坡头": "101170503", "海原": "101170504", "郑州": "101180101", "巩义": "101180102", "荥阳": "101180103", "登封": "101180104", "新密": "101180105", "新郑": "101180106", "中牟": "101180107", "上街": "101180108", "中原": "101180109", "二七": "101180110", "管城": "101180111", "金水": "101180112", "惠济": "101180113", "安阳": "101180201", "汤阴": "101180202", "滑县": "101180203", "内黄": "101180204", "林州": "101180205", "文峰": "101180206", "北关": "101180207", "殷都": "101180208", "龙安": "101180209", "安阳县": "101180210", "新乡": "101180301", "获嘉": "101180302", "原阳": "101180303", "辉县": "101180304", "卫辉": "101180305", "延津": "101180306", "封丘": "101180307", "长垣": "101180308", "红旗": "101180309", "卫滨": "101180310", "凤泉": "101180311", "牧野": "101180312", "新乡县": "101180313", "许昌": "101180401", "鄢陵": "101180402", "襄城": "101180403", "长葛": "101180404", "禹州": "101180405", "魏都": "101180406", "建安": "101180407", "平顶山": "101180501", "郏县": "101180502", "宝丰": "101180503", "汝州": "101180504", "叶县": "101180505", "舞钢": "101180506", "鲁山": "101180507", "石龙": "101180508", "新华": "101180509", "卫东": "101180510", "湛河": "101180511", "信阳": "101180601", "息县": "101180602", "罗山": "101180603", "光山": "101180604", "新县": "101180605", "淮滨": "101180606", "潢川": "101180607", "固始": "101180608", "商城": "101180609", "浉河": "101180610", "平桥": "101180611", "南阳": "101180701", "南召": "101180702", "方城": "101180703", "社旗": "101180704", "西峡": "101180705", "内乡": "101180706", "镇平": "101180707", "淅川": "101180708", "新野": "101180709", "唐河": "101180710", "邓州": "101180711", "桐柏": "101180712", "宛城": "101180713", "卧龙": "101180714", "开封": "101180801", "杞县": "101180802", "尉氏": "101180803", "通许": "101180804", "兰考": "101180805", "龙亭": "101180806", "顺河": "101180807", "鼓楼": "101180808", "禹王台": "101180809", "祥符": "101180810", "洛阳": "101180901", "新安": "101180902", "宜阳": "101180904", "洛宁": "101180905", "伊川": "101180906", "嵩县": "101180907", "偃师": "101180908", "栾川": "101180909", "汝阳": "101180910", "孟津": "101180911", "老城": "101180912", "西工": "101180913", "瀍河": "101180914", "涧西": "101180915", "洛龙": "101180916", "商丘": "101181001", "梁园": "101181002", "睢县": "101181003", "民权": "101181004", "虞城": "101181005", "柘城": "101181006", "宁陵": "101181007", "夏邑": "101181008", "永城": "101181009", "睢阳": "101181010", "焦作": "101181101", "修武": "101181102", "武陟": "101181103", "沁阳": "101181104", "解放": "101181105", "博爱": "101181106", "温县": "101181107", "孟州": "101181108", "中站": "101181109", "马村": "101181110", "山阳": "101181111", "鹤壁": "101181201", "浚县": "101181202", "淇县": "101181203", "鹤山": "101181204", "山城": "101181205", "淇滨": "101181206", "濮阳": "101181301", "台前": "101181302", "南乐": "101181303", "清丰": "101181304", "范县": "101181305", "华龙": "101181306", "濮阳县": "101181307", "周口": "101181401", "扶沟": "101181402", "太康": "101181403", "淮阳": "101181404", "西华": "101181405", "商水": "101181406", "项城": "101181407", "郸城": "101181408", "鹿邑": "101181409", "沈丘": "101181410", "川汇": "101181411", "漯河": "101181501", "临颍": "101181502", "舞阳": "101181503", "源汇": "101181504", "郾城": "101181505", "召陵": "101181506", "驻马店": "101181601", "西平": "101181602", "遂平": "101181603", "上蔡": "101181604", "汝南": "101181605", "泌阳": "101181606", "平舆": "101181607", "新蔡": "101181608", "确山": "101181609", "正阳": "101181610", "驿城": "101181611", "三门峡": "101181701", "灵宝": "101181702", "渑池": "101181703", "卢氏": "101181704", "义马": "101181705", "湖滨": "101181707", "陕州": "101181708", "济源": "101181801", "南京": "101190101", "溧水": "101190102", "高淳": "101190103", "江宁": "101190104", "六合": "101190105", "浦口": "101190107", "玄武": "101190108", "秦淮": "101190109", "建邺": "101190110", "鼓楼": "101190111", "栖霞": "101190112", "雨花台": "101190113", "无锡": "101190201", "江阴": "101190202", "宜兴": "101190203", "锡山": "101190204", "惠山": "101190205", "滨湖": "101190206", "梁溪": "101190207", "新吴": "101190208", "镇江": "101190301", "丹阳": "101190302", "扬中": "101190303", "句容": "101190304", "丹徒": "101190305", "京口": "101190306", "润州": "101190307", "苏州": "101190401", "常熟": "101190402", "张家港": "101190403", "昆山": "101190404", "吴中": "101190405", "虎丘": "101190406", "吴江": "101190407", "太仓": "101190408", "相城": "101190409", "姑苏": "101190410", "南通": "101190501", "海安": "101190502", "如皋": "101190503", "如东": "101190504", "崇川": "101190505", "启东": "101190507", "海门": "101190508", "通州": "101190509", "扬州": "101190601", "宝应": "101190602", "仪征": "101190603", "高邮": "101190604", "江都": "101190605", "邗江": "101190606", "广陵": "101190607", "盐城": "101190701", "响水": "101190702", "滨海": "101190703", "阜宁": "101190704", "射阳": "101190705", "建湖": "101190706", "东台": "101190707", "大丰": "101190708", "盐都": "101190709", "亭湖": "101190710", "徐州": "101190801", "铜山": "101190802", "丰县": "101190803", "沛县": "101190804", "邳州": "101190805", "睢宁": "101190806", "新沂": "101190807", "鼓楼": "101190808", "云龙": "101190809", "贾汪": "101190810", "泉山": "101190811", "淮安": "101190901", "金湖": "101190902", "盱眙": "101190903", "洪泽": "101190904", "涟水": "101190905", "淮阴区": "101190906", "清江浦": "101190907", "淮安区": "101190908", "连云港": "101191001", "东海": "101191002", "赣榆": "101191003", "灌云": "101191004", "灌南": "101191005", "海州": "101191006", "连云": "101191007", "常州": "101191101", "溧阳": "101191102", "金坛": "101191103", "武进": "101191104", "天宁": "101191105", "钟楼": "101191106", "新北": "101191107", "泰州": "101191201", "兴化": "101191202", "泰兴": "101191203", "姜堰": "101191204", "靖江": "101191205", "海陵": "101191206", "高港": "101191207", "宿迁": "101191301", "沭阳": "101191302", "泗阳": "101191303", "泗洪": "101191304", "宿豫": "101191305", "宿城": "101191306", "武汉": "101200101", "蔡甸": "101200102", "黄陂": "101200103", "新洲": "101200104", "江夏": "101200105", "东西湖": "101200106", "江岸": "101200107", "江汉": "101200108", "硚口": "101200109", "汉阳": "101200110", "武昌": "101200111", "青山": "101200112", "洪山": "101200113", "汉南": "101200114", "襄阳": "101200201", "襄州": "101200202", "保康": "101200203", "南漳": "101200204", "宜城": "101200205", "老河口": "101200206", "谷城": "101200207", "枣阳": "101200208", "襄城": "101200209", "樊城": "101200210", "鄂州": "101200301", "梁子湖": "101200302", "华容": "101200303", "鄂城": "101200304", "孝感": "101200401", "安陆": "101200402", "云梦": "101200403", "大悟": "101200404", "应城": "101200405", "汉川": "101200406", "孝昌": "101200407", "孝南": "101200408", "黄冈": "101200501", "红安": "101200502", "麻城": "101200503", "罗田": "101200504", "英山": "101200505", "浠水": "101200506", "蕲春": "101200507", "黄梅": "101200508", "武穴": "101200509", "团风": "101200510", "黄州": "101200511", "黄石": "101200601", "大冶": "101200602", "阳新": "101200603", "铁山": "101200604", "下陆": "101200605", "西塞山": "101200606", "黄石港": "101200607", "咸宁": "101200701", "赤壁": "101200702", "嘉鱼": "101200703", "崇阳": "101200704", "通城": "101200705", "通山": "101200706", "咸安": "101200707", "荆州": "101200801", "江陵": "101200802", "公安": "101200803", "石首": "101200804", "监利": "101200805", "洪湖": "101200806", "松滋": "101200807", "沙市": "101200808", "荆州区": "101200809", "宜昌": "101200901", "远安": "101200902", "秭归": "101200903", "兴山": "101200904", "西陵": "101200905", "五峰": "101200906", "当阳": "101200907", "长阳": "101200908", "宜都": "101200909", "枝江": "101200910", "夷陵": "101200912", "伍家岗": "101200913", "点军": "101200914", "猇亭": "101200915", "恩施州": "101201001", "利川": "101201002", "建始": "101201003", "咸丰": "101201004", "宣恩": "101201005", "鹤峰": "101201006", "来凤": "101201007", "巴东": "101201008", "恩施市": "101201009", "十堰": "101201101", "竹溪": "101201102", "郧西": "101201103", "郧阳": "101201104", "竹山": "101201105", "房县": "101201106", "丹江口": "101201107", "茅箭": "101201108", "张湾": "101201109", "神农架": "101201201", "随州": "101201301", "广水": "101201302", "曾都": "101201303", "随县": "101201304", "荆门": "101201401", "钟祥": "101201402", "京山": "101201403", "掇刀": "101201404", "沙洋": "101201405", "东宝": "101201406", "天门": "101201501", "仙桃": "101201601", "潜江": "101201701", "杭州": "101210101", "萧山": "101210102", "桐庐": "101210103", "淳安": "101210104", "建德": "101210105", "余杭": "101210106", "临安": "101210107", "富阳": "101210108", "上城": "101210109", "钱塘": "101210111", "拱墅": "101210112", "西湖": "101210113", "滨江": "101210114", "临平": "101210115", "湖州": "101210201", "长兴": "101210202", "安吉": "101210203", "德清": "101210204", "吴兴": "101210205", "南浔": "101210206", "嘉兴": "101210301", "嘉善": "101210302", "海宁": "101210303", "桐乡": "101210304", "平湖": "101210305", "海盐": "101210306", "南湖": "101210307", "秀洲": "101210308", "宁波": "101210401", "海曙": "101210402", "慈溪": "101210403", "余姚": "101210404", "奉化": "101210405", "象山": "101210406", "宁海": "101210408", "江北": "101210409", "北仑": "101210410", "鄞州": "101210411", "镇海": "101210412", "越城": "101210501", "诸暨": "101210502", "上虞": "101210503", "新昌": "101210504", "嵊州": "101210505", "柯桥": "101210506", "绍兴": "101210507", "台州": "101210601", "玉环": "101210603", "三门": "101210604", "天台": "101210605", "仙居": "101210606", "温岭": "101210607", "临海": "101210610", "椒江": "101210611", "黄岩": "101210612", "路桥": "101210613", "温州": "101210701", "泰顺": "101210702", "文成": "101210703", "平阳": "101210704", "瑞安": "101210705", "洞头": "101210706", "乐清": "101210707", "永嘉": "101210708", "苍南": "101210709", "鹿城": "101210710", "龙湾": "101210711", "瓯海": "101210712", "龙港": "101210713", "丽水": "101210801", "遂昌": "101210802", "龙泉": "101210803", "缙云": "101210804", "青田": "101210805", "云和": "101210806", "庆元": "101210807", "松阳": "101210808", "景宁": "101210809", "莲都": "101210810", "金华": "101210901", "浦江": "101210902", "兰溪": "101210903", "义乌": "101210904", "东阳": "101210905", "武义": "101210906", "永康": "101210907", "磐安": "101210908", "婺城": "101210909", "金东": "101210910", "衢州": "101211001", "常山": "101211002", "开化": "101211003", "龙游": "101211004", "江山": "101211005", "衢江": "101211006", "柯城": "101211007", "舟山": "101211101", "嵊泗": "101211102", "岱山": "101211104", "普陀": "101211105", "定海": "101211106", "合肥": "101220101", "长丰": "101220102", "肥东": "101220103", "肥西": "101220104", "巢湖": "101220105", "庐江": "101220106", "瑶海": "101220107", "庐阳": "101220108", "蜀山": "101220109", "包河": "101220110", "蚌埠": "101220201", "怀远": "101220202", "固镇": "101220203", "五河": "101220204", "龙子湖": "101220205", "蚌山": "101220206", "禹会": "101220207", "淮上": "101220208", "芜湖": "101220301", "繁昌": "101220302", "湾沚": "101220303", "南陵": "101220304", "无为": "101220305", "镜湖": "101220306", "弋江": "101220307", "鸠江": "101220308", "淮南": "101220401", "凤台": "101220402", "潘集": "101220403", "大通": "101220404", "田家庵": "101220405", "谢家集": "101220406", "八公山": "101220407", "寿县": "101220408", "马鞍山": "101220501", "当涂": "101220502", "含山": "101220503", "和县": "101220504", "花山": "101220505", "雨山": "101220506", "博望": "101220507", "安庆": "101220601", "太湖": "101220603", "潜山": "101220604", "怀宁": "101220605", "宿松": "101220606", "望江": "101220607", "岳西": "101220608", "桐城": "101220609", "迎江": "101220610", "大观": "101220611", "宜秀": "101220612", "宿州": "101220701", "砀山": "101220702", "灵璧": "101220703", "泗县": "101220704", "萧县": "101220705", "埇桥": "101220706", "阜阳": "101220801", "阜南": "101220802", "颍上": "101220803", "临泉": "101220804", "界首": "101220805", "太和": "101220806", "颍州": "101220807", "颍东": "101220808", "颍泉": "101220809", "亳州": "101220901", "涡阳": "101220902", "利辛": "101220903", "蒙城": "101220904", "谯城": "101220905", "黄山": "101221001", "黄山区": "101221002", "屯溪": "101221003", "祁门": "101221004", "黟县": "101221005", "歙县": "101221006", "休宁": "101221007", "徽州": "101221009", "滁州": "101221101", "凤阳": "101221102", "明光": "101221103", "定远": "101221104", "全椒": "101221105", "来安": "101221106", "天长": "101221107", "琅琊": "101221108", "南谯": "101221109", "淮北": "101221201", "濉溪": "101221202", "杜集": "101221203", "相山": "101221204", "烈山": "101221205", "铜陵": "101221301", "铜官": "101221302", "义安": "101221303", "郊区": "101221304", "枞阳": "101221305", "宣城": "101221401", "泾县": "101221402", "旌德": "101221403", "宁国": "101221404", "绩溪": "101221405", "广德": "101221406", "郎溪": "101221407", "宣州": "101221408", "六安": "101221501", "霍邱": "101221502", "金安": "101221504", "金寨": "101221505", "霍山": "101221506", "舒城": "101221507", "裕安": "101221508", "叶集": "101221509", "池州": "101221701", "东至": "101221702", "青阳": "101221703", "石台": "101221705", "贵池": "101221706", "福州": "101230101", "闽清": "101230102", "闽侯": "101230103", "罗源": "101230104", "连江": "101230105", "鼓楼": "101230106", "永泰": "101230107", "平潭": "101230108", "台江": "101230109", "长乐": "101230110", "福清": "101230111", "仓山": "101230112", "马尾": "101230113", "晋安": "101230114", "厦门": "101230201", "同安": "101230202", "思明": "101230203", "海沧": "101230204", "湖里": "101230205", "集美": "101230206", "翔安": "101230207", "宁德": "101230301", "古田": "101230302", "霞浦": "101230303", "寿宁": "101230304", "周宁": "101230305", "福安": "101230306", "柘荣": "101230307", "福鼎": "101230308", "屏南": "101230309", "蕉城": "101230310", "莆田": "101230401", "仙游": "101230402", "涵江": "101230404", "秀屿": "101230405", "荔城": "101230406", "城厢": "101230407", "泉州": "101230501", "安溪": "101230502", "金门": "101230503", "永春": "101230504", "德化": "101230505", "南安": "101230506", "惠安": "101230508", "晋江": "101230509", "石狮": "101230510", "鲤城": "101230511", "丰泽": "101230512", "洛江": "101230513", "泉港": "101230514", "漳州": "101230601", "长泰": "101230602", "南靖": "101230603", "平和": "101230604", "龙海": "101230605", "漳浦": "101230606", "诏安": "101230607", "东山": "101230608", "云霄": "101230609", "华安": "101230610", "芗城": "101230611", "龙文": "101230612", "龙岩": "101230701", "长汀": "101230702", "连城": "101230703", "武平": "101230704", "上杭": "101230705", "永定": "101230706", "漳平": "101230707", "新罗": "101230708", "三明": "101230801", "宁化": "101230802", "清流": "101230803", "泰宁": "101230804", "将乐": "101230805", "建宁": "101230806", "明溪": "101230807", "沙县": "101230808", "尤溪": "101230809", "永安": "101230810", "大田": "101230811", "三元": "101230813", "南平": "101230901", "顺昌": "101230902", "光泽": "101230903", "邵武": "101230904", "武夷山": "101230905", "浦城": "101230906", "建阳": "101230907", "松溪": "101230908", "政和": "101230909", "建瓯": "101230910", "延平": "101230911", "南昌": "101240101", "新建": "101240102", "南昌县": "101240103", "安义": "101240104", "进贤": "101240105", "东湖": "101240106", "西湖": "101240107", "青云谱": "101240108", "红谷滩": "101240109", "青山湖": "101240110", "九江": "101240201", "瑞昌": "101240202", "庐山": "101240203", "武宁": "101240204", "德安": "101240205", "永修": "101240206", "湖口": "101240207", "彭泽": "101240208", "都昌": "101240210", "浔阳": "101240211", "修水": "101240212", "共青城": "101240213", "濂溪": "101240214", "柴桑": "101240215", "上饶": "101240301", "鄱阳": "101240302", "婺源": "101240303", "信州": "101240304", "余干": "101240305", "万年": "101240306", "德兴": "101240307", "广信": "101240308", "弋阳": "101240309", "横峰": "101240310", "铅山": "101240311", "玉山": "101240312", "广丰": "101240313", "抚州": "101240401", "广昌": "101240402", "乐安": "101240403", "崇仁": "101240404", "金溪": "101240405", "资溪": "101240406", "宜黄": "101240407", "南城": "101240408", "南丰": "101240409", "黎川": "101240410", "东乡": "101240411", "临川": "101240412", "宜春": "101240501", "铜鼓": "101240502", "宜丰": "101240503", "万载": "101240504", "上高": "101240505", "靖安": "101240506", "奉新": "101240507", "高安": "101240508", "樟树": "101240509", "丰城": "101240510", "袁州": "101240511", "吉安": "101240601", "吉安县": "101240602", "吉水": "101240603", "新干": "101240604", "峡江": "101240605", "永丰": "101240606", "永新": "101240607", "井冈山": "101240608", "万安": "101240609", "遂川": "101240610", "泰和": "101240611", "安福": "101240612", "吉州": "101240614", "青原": "101240615", "赣州": "101240701", "崇义": "101240702", "上犹": "101240703", "南康": "101240704", "大余": "101240705", "信丰": "101240706", "宁都": "101240707", "石城": "101240708", "瑞金": "101240709", "于都": "101240710", "会昌": "101240711", "安远": "101240712", "全南": "101240713", "龙南": "101240714", "定南": "101240715", "寻乌": "101240716", "兴国": "101240717", "赣县": "101240718", "章贡": "101240719", "景德镇": "101240801", "乐平": "101240802", "浮梁": "101240803", "昌江": "101240804", "珠山": "101240805", "萍乡": "101240901", "莲花": "101240902", "上栗": "101240903", "安源": "101240904", "芦溪": "101240905", "湘东": "101240906", "新余": "101241001", "分宜": "101241002", "渝水": "101241003", "鹰潭": "101241101", "余江": "101241102", "贵溪": "101241103", "月湖": "101241104", "长沙": "101250101", "宁乡": "101250102", "浏阳": "101250103", "望城": "101250105", "长沙县": "101250106", "芙蓉": "101250107", "天心": "101250108", "岳麓": "101250109", "开福": "101250110", "雨花": "101250111", "湘潭": "101250201", "韶山": "101250202", "湘乡": "101250203", "雨湖": "101250204", "岳塘": "101250205", "湘潭县": "101250206", "株洲": "101250301", "攸县": "101250302", "醴陵": "101250303", "荷塘": "101250304", "茶陵": "101250305", "炎陵": "101250306", "芦淞": "101250307", "石峰": "101250308", "天元": "101250309", "渌口": "101250310", "衡阳": "101250401", "衡山": "101250402", "衡东": "101250403", "祁东": "101250404", "衡阳县": "101250405", "常宁": "101250406", "衡南": "101250407", "耒阳": "101250408", "南岳": "101250409", "珠晖": "101250410", "雁峰": "101250411", "石鼓": "101250412", "蒸湘": "101250413", "郴州": "101250501", "桂阳": "101250502", "嘉禾": "101250503", "宜章": "101250504", "临武": "101250505", "北湖": "101250506", "资兴": "101250507", "汝城": "101250508", "安仁": "101250509", "永兴": "101250510", "桂东": "101250511", "苏仙": "101250512", "常德": "101250601", "安乡": "101250602", "桃源": "101250603", "汉寿": "101250604", "澧县": "101250605", "临澧": "101250606", "石门": "101250607", "津市": "101250608", "武陵": "101250609", "鼎城": "101250610", "益阳": "101250700", "赫山区": "101250701", "南县": "101250702", "桃江": "101250703", "安化": "101250704", "沅江": "101250705", "资阳": "101250706", "娄底": "101250801", "双峰": "101250802", "冷水江": "101250803", "娄星": "101250804", "新化": "101250805", "涟源": "101250806", "邵阳": "101250901", "隆回": "101250902", "洞口": "101250903", "新邵": "101250904", "邵东": "101250905", "绥宁": "101250906", "新宁": "101250907", "武冈": "101250908", "城步": "101250909", "邵阳县": "101250910", "双清": "101250911", "大祥": "101250912", "北塔": "101250913", "岳阳": "101251001", "华容": "101251002", "湘阴": "101251003", "汨罗": "101251004", "平江": "101251005", "临湘": "101251006", "岳阳楼区": "101251007", "云溪": "101251008", "君山": "101251009", "岳阳县": "101251010", "张家界": "101251101", "桑植": "101251102", "慈利": "101251103", "武陵源": "101251104", "永定": "101251105", "怀化": "101251201", "鹤城": "101251202", "沅陵": "101251203", "辰溪": "101251204", "靖州": "101251205", "会同": "101251206", "通道": "101251207", "麻阳": "101251208", "新晃": "101251209", "芷江": "101251210", "溆浦": "101251211", "中方": "101251212", "洪江": "101251213", "永州": "101251401", "祁阳": "101251402", "东安": "101251403", "双牌": "101251404", "道县": "101251405", "宁远": "101251406", "江永": "101251407", "蓝山": "101251408", "新田": "101251409", "江华": "101251410", "冷水滩": "101251411", "零陵": "101251412", "吉首": "101251501", "保靖": "101251502", "永顺": "101251503", "古丈": "101251504", "凤凰": "101251505", "泸溪": "101251506", "龙山": "101251507", "花垣": "101251508", "湘西": "101251509", "贵阳": "101260101", "白云": "101260102", "花溪": "101260103", "乌当": "101260104", "息烽": "101260105", "开阳": "101260106", "修文": "101260107", "清镇": "101260108", "云岩": "101260110", "南明": "101260111", "观山湖": "101260112", "遵义": "101260201", "仁怀": "101260203", "绥阳": "101260204", "湄潭": "101260205", "凤冈": "101260206", "桐梓": "101260207", "赤水": "101260208", "习水": "101260209", "道真": "101260210", "正安": "101260211", "务川": "101260212", "余庆": "101260213", "汇川": "101260214", "红花岗": "101260215", "播州": "101260216", "安顺": "101260301", "普定": "101260302", "镇宁": "101260303", "平坝": "101260304", "紫云": "101260305", "关岭": "101260306", "西秀": "101260307", "都匀": "101260401", "贵定": "101260402", "瓮安": "101260403", "长顺": "101260404", "福泉": "101260405", "惠水": "101260406", "龙里": "101260407", "罗甸": "101260408", "平塘": "101260409", "独山": "101260410", "三都": "101260411", "荔波": "101260412", "黔南": "101260413", "凯里": "101260501", "岑巩": "101260502", "施秉": "101260503", "镇远": "101260504", "黄平": "101260505", "黔东南": "101260506", "麻江": "101260507", "丹寨": "101260508", "三穗": "101260509", "台江": "101260510", "剑河": "101260511", "雷山": "101260512", "黎平": "101260513", "天柱": "101260514", "锦屏": "101260515", "榕江": "101260516", "从江": "101260517", "铜仁": "101260601", "江口": "101260602", "玉屏": "101260603", "万山": "101260604", "思南": "101260605", "碧江": "101260606", "印江": "101260607", "石阡": "101260608", "沿河": "101260609", "德江": "101260610", "松桃": "101260611", "毕节": "101260701", "赫章": "101260702", "金沙": "101260703", "威宁": "101260704", "大方": "101260705", "纳雍": "101260706", "织金": "101260707", "黔西": "101260708", "七星关": "101260709", "水城": "101260801", "六枝": "101260802", "六盘水": "101260803", "盘州": "101260804", "钟山": "101260805", "兴义": "101260901", "晴隆": "101260902", "兴仁": "101260903", "贞丰": "101260904", "望谟": "101260905", "黔西南": "101260906", "安龙": "101260907", "册亨": "101260908", "普安": "101260909", "成都": "101270101", "龙泉驿": "101270102", "新都": "101270103", "温江": "101270104", "金堂": "101270105", "双流": "101270106", "郫都": "101270107", "大邑": "101270108", "蒲江": "101270109", "新津": "101270110", "都江堰": "101270111", "彭州": "101270112", "邛崃": "101270113", "崇州": "101270114", "青白江": "101270115", "锦江": "101270116", "青羊": "101270117", "金牛": "101270118", "武侯": "101270119", "成华": "101270120", "简阳": "101270121", "攀枝花": "101270201", "仁和": "101270202", "米易": "101270203", "盐边": "101270204", "东区": "101270205", "西区": "101270206", "自贡": "101270301", "富顺": "101270302", "荣县": "101270303", "自流井": "101270304", "贡井": "101270305", "大安": "101270306", "沿滩": "101270307", "绵阳": "101270401", "三台": "101270402", "盐亭": "101270403", "梓潼": "101270405", "北川": "101270406", "平武": "101270407", "江油": "101270408", "涪城": "101270409", "游仙": "101270410", "安州": "101270411", "南充": "101270501", "南部": "101270502", "营山": "101270503", "蓬安": "101270504", "仪陇": "101270505", "西充": "101270506", "阆中": "101270507", "顺庆": "101270508", "高坪": "101270509", "嘉陵": "101270510", "达州": "101270601", "宣汉": "101270602", "开江": "101270603", "大竹": "101270604", "渠县": "101270605", "万源": "101270606", "通川": "101270607", "达川": "101270608", "遂宁": "101270701", "蓬溪": "101270702", "射洪": "101270703", "船山": "101270704", "安居": "101270705", "大英": "101270706", "广安": "101270801", "岳池": "101270802", "武胜": "101270803", "邻水": "101270804", "华蓥": "101270805", "前锋": "101270806", "广安区": "101270807", "巴中": "101270901", "通江": "101270902", "南江": "101270903", "平昌": "101270904", "巴州": "101270905", "恩阳": "101270906", "泸州": "101271001", "江阳": "101271002", "泸县": "101271003", "合江": "101271004", "叙永": "101271005", "古蔺": "101271006", "纳溪": "101271007", "龙马潭": "101271008", "宜宾": "101271101", "翠屏": "101271102", "叙州区": "101271103", "南溪": "101271104", "江安": "101271105", "长宁": "101271106", "高县": "101271107", "珙县": "101271108", "筠连": "101271109", "兴文": "101271110", "屏山": "101271111", "内江": "101271201", "东兴": "101271202", "威远": "101271203", "资中": "101271204", "隆昌": "101271205", "市中": "101271206", "资阳": "101271301", "安岳": "101271302", "乐至": "101271303", "雁江": "101271305", "乐山": "101271401", "犍为": "101271402", "井研": "101271403", "夹江": "101271404", "沐川": "101271405", "峨边": "101271406", "马边": "101271407", "市中": "101271410", "沙湾": "101271411", "五通桥": "101271412", "金口河": "101271413", "峨眉山市": "101271414", "眉山": "101271501", "仁寿": "101271502", "彭山": "101271503", "洪雅": "101271504", "丹棱": "101271505", "青神": "101271506", "东坡": "101271507", "凉山": "101271601", "木里": "101271603", "盐源": "101271604", "德昌": "101271605", "会理": "101271606", "会东": "101271607", "宁南": "101271608", "普格": "101271609", "西昌": "101271610", "金阳": "101271611", "昭觉": "101271612", "喜德": "101271613", "冕宁": "101271614", "越西": "101271615", "甘洛": "101271616", "雷波": "101271617", "美姑": "101271618", "布拖": "101271619", "雅安": "101271701", "名山": "101271702", "荥经": "101271703", "汉源": "101271704", "石棉": "101271705", "天全": "101271706", "芦山": "101271707", "宝兴": "101271708", "雨城": "101271709", "甘孜": "101271801", "康定": "101271802", "泸定": "101271803", "丹巴": "101271804", "九龙": "101271805", "雅江": "101271806", "道孚": "101271807", "炉霍": "101271808", "新龙": "101271809", "德格": "101271810", "白玉": "101271811", "石渠": "101271812", "色达": "101271813", "理塘": "101271814", "巴塘": "101271815", "乡城": "101271816", "稻城": "101271817", "得荣": "101271818", "甘孜县": "101271819", "阿坝": "101271901", "汶川": "101271902", "理县": "101271903", "茂县": "101271904", "松潘": "101271905", "九寨沟": "101271906", "金川": "101271907", "小金": "101271908", "黑水": "101271909", "马尔康": "101271910", "壤塘": "101271911", "若尔盖": "101271912", "红原": "101271913", "阿坝县": "101271914", "德阳": "101272001", "中江": "101272002", "广汉": "101272003", "什邡": "101272004", "绵竹": "101272005", "罗江": "101272006", "旌阳": "101272007", "广元": "101272101", "旺苍": "101272102", "青川": "101272103", "剑阁": "101272104", "苍溪": "101272105", "利州": "101272106", "昭化": "101272107", "朝天": "101272108", "广州": "101280101", "番禺": "101280102", "从化": "101280103", "增城": "101280104", "花都": "101280105", "荔湾": "101280106", "越秀": "101280107", "海珠": "101280108", "天河": "101280109", "白云": "101280110", "黄埔": "101280111", "南沙": "101280112", "韶关": "101280201", "乳源": "101280202", "始兴": "101280203", "翁源": "101280204", "乐昌": "101280205", "仁化": "101280206", "南雄": "101280207", "新丰": "101280208", "曲江": "101280209", "浈江": "101280210", "武江": "101280211", "惠州": "101280301", "博罗": "101280302", "惠阳": "101280303", "惠东": "101280304", "龙门": "101280305", "惠城": "101280306", "梅州": "101280401", "兴宁": "101280402", "蕉岭": "101280403", "大埔": "101280404", "梅江": "101280405", "丰顺": "101280406", "平远": "101280407", "五华": "101280408", "梅县": "101280409", "汕头": "101280501", "潮阳": "101280502", "澄海": "101280503", "南澳": "101280504", "龙湖": "101280505", "金平": "101280506", "濠江": "101280507", "潮南": "101280508", "深圳": "101280601", "罗湖": "101280602", "福田": "101280603", "南山": "101280604", "宝安": "101280605", "龙岗": "101280606", "盐田": "101280607", "龙华": "101280608", "坪山": "101280609", "光明": "101280610", "珠海": "101280701", "斗门": "101280702", "金湾": "101280703", "香洲": "101280704", "佛山": "101280800", "顺德": "101280801", "三水": "101280802", "南海": "101280803", "高明": "101280804", "禅城": "101280805", "肇庆": "101280901", "广宁": "101280902", "四会": "101280903", "端州": "101280904", "德庆": "101280905", "怀集": "101280906", "封开": "101280907", "高要": "101280908", "鼎湖": "101280909", "湛江": "101281001", "吴川": "101281002", "雷州": "101281003", "徐闻": "101281004", "廉江": "101281005", "赤坎": "101281006", "遂溪": "101281007", "坡头": "101281008", "霞山": "101281009", "麻章": "101281010", "江门": "101281101", "开平": "101281103", "新会": "101281104", "恩平": "101281105", "台山": "101281106", "蓬江": "101281107", "鹤山": "101281108", "江海": "101281109", "河源": "101281201", "紫金": "101281202", "连平": "101281203", "和平": "101281204", "龙川": "101281205", "东源": "101281206", "源城": "101281207", "清远": "101281301", "连南": "101281302", "连州": "101281303", "连山": "101281304", "阳山": "101281305", "佛冈": "101281306", "英德": "101281307", "清新": "101281308", "清城": "101281309", "云浮": "101281401", "罗定": "101281402", "新兴": "101281403", "郁南": "101281404", "云城": "101281405", "云安": "101281406", "潮州": "101281501", "饶平": "101281502", "潮安": "101281503", "湘桥": "101281504", "东莞": "101281601", "中山": "101281701", "阳江": "101281801", "阳春": "101281802", "阳东": "101281803", "阳西": "101281804", "江城": "101281805", "揭阳": "101281901", "揭西": "101281902", "普宁": "101281903", "惠来": "101281904", "揭东": "101281905", "榕城": "101281906", "茂名": "101282001", "高州": "101282002", "化州": "101282003", "电白": "101282004", "信宜": "101282005", "茂南": "101282007", "汕尾": "101282101", "海丰": "101282102", "陆丰": "101282103", "陆河": "101282104", "城区": "101282105", "昆明": "101290101", "五华": "101290102", "东川": "101290103", "寻甸": "101290104", "晋宁": "101290105", "宜良": "101290106", "石林": "101290107", "呈贡": "101290108", "富民": "101290109", "嵩明": "101290110", "禄劝": "101290111", "安宁": "101290112", "盘龙": "101290114", "官渡": "101290115", "西山": "101290116", "大理州": "101290201", "云龙": "101290202", "漾濞": "101290203", "永平": "101290204", "宾川": "101290205", "弥渡": "101290206", "祥云": "101290207", "巍山": "101290208", "剑川": "101290209", "洱源": "101290210", "鹤庆": "101290211", "南涧": "101290212", "大理市": "101290213", "红河": "101290301", "石屏": "101290302", "建水": "101290303", "弥勒": "101290304", "元阳": "101290305", "绿春": "101290306", "开远": "101290307", "个旧": "101290308", "蒙自": "101290309", "屏边": "101290310", "泸西": "101290311", "金平": "101290312", "河口": "101290313", "红河县": "101290314", "曲靖": "101290401", "沾益": "101290402", "陆良": "101290403", "富源": "101290404", "马龙": "101290405", "师宗": "101290406", "罗平": "101290407", "会泽": "101290408", "宣威": "101290409", "麒麟": "101290410", "保山": "101290501", "隆阳": "101290502", "龙陵": "101290503", "施甸": "101290504", "昌宁": "101290505", "腾冲": "101290506", "文山州": "101290601", "西畴": "101290602", "马关": "101290603", "麻栗坡": "101290604", "砚山": "101290605", "丘北": "101290606", "广南": "101290607", "富宁": "101290608", "文山市": "101290609", "玉溪": "101290701", "澄江": "101290702", "江川": "101290703", "通海": "101290704", "华宁": "101290705", "新平": "101290706", "易门": "101290707", "峨山": "101290708", "元江": "101290709", "红塔": "101290710", "楚雄州": "101290801", "大姚": "101290802", "元谋": "101290803", "姚安": "101290804", "牟定": "101290805", "南华": "101290806", "武定": "101290807", "禄丰": "101290808", "双柏": "101290809", "永仁": "101290810", "楚雄市": "101290811", "普洱": "101290901", "景谷": "101290902", "景东": "101290903", "澜沧": "101290904", "思茅": "101290905", "墨江": "101290906", "江城": "101290907", "孟连": "101290908", "西盟": "101290909", "镇沅": "101290911", "宁洱": "101290912", "昭通": "101291001", "鲁甸": "101291002", "彝良": "101291003", "镇雄": "101291004", "威信": "101291005", "巧家": "101291006", "绥江": "101291007", "永善": "101291008", "盐津": "101291009", "大关": "101291010", "水富": "101291011", "昭阳": "101291012", "临沧": "101291101", "沧源": "101291102", "耿马": "101291103", "双江": "101291104", "凤庆": "101291105", "永德": "101291106", "云县": "101291107", "镇康": "101291108", "临翔": "101291109", "怒江": "101291201", "福贡": "101291203", "兰坪": "101291204", "泸水": "101291205", "贡山": "101291207", "香格里拉": "101291301", "德钦": "101291302", "维西": "101291303", "迪庆": "101291305", "丽江": "101291401", "永胜": "101291402", "华坪": "101291403", "宁蒗": "101291404", "古城": "101291405", "玉龙": "101291406", "德宏": "101291501", "陇川": "101291503", "盈江": "101291504", "瑞丽": "101291506", "梁河": "101291507", "芒市": "101291508", "景洪": "101291601", "西双版纳": "101291602", "勐海": "101291603", "勐腊": "101291605", "南宁": "101300101", "兴宁": "101300102", "邕宁": "101300103", "横州": "101300104", "隆安": "101300105", "马山": "101300106", "上林": "101300107", "武鸣": "101300108", "宾阳": "101300109", "青秀": "101300110", "江南": "101300111", "西乡塘": "101300112", "良庆": "101300113", "崇左": "101300201", "天等": "101300202", "龙州": "101300203", "凭祥": "101300204", "大新": "101300205", "扶绥": "101300206", "宁明": "101300207", "江州": "101300208", "柳州": "101300301", "柳城": "101300302", "城中": "101300303", "鹿寨": "101300304", "柳江": "101300305", "融安": "101300306", "融水": "101300307", "三江": "101300308", "鱼峰": "101300309", "柳南": "101300310", "柳北": "101300311", "来宾": "101300401", "忻城": "101300402", "金秀": "101300403", "象州": "101300404", "武宣": "101300405", "合山": "101300406", "兴宾": "101300407", "桂林": "101300501", "秀峰": "101300502", "龙胜": "101300503", "永福": "101300504", "临桂": "101300505", "兴安": "101300506", "灵川": "101300507", "全州": "101300508", "灌阳": "101300509", "阳朔": "101300510", "恭城": "101300511", "平乐": "101300512", "荔浦": "101300513", "资源": "101300514", "叠彩": "101300515", "象山": "101300516", "七星": "101300517", "雁山": "101300518", "梧州": "101300601", "藤县": "101300602", "万秀": "101300603", "苍梧": "101300604", "蒙山": "101300605", "岑溪": "101300606", "长洲": "101300607", "龙圩": "101300608", "贺州": "101300701", "昭平": "101300702", "富川": "101300703", "钟山": "101300704", "八步": "101300705", "平桂": "101300706", "贵港": "101300801", "桂平": "101300802", "平南": "101300803", "港北": "101300804", "港南": "101300805", "覃塘": "101300806", "玉林": "101300901", "博白": "101300902", "北流": "101300903", "容县": "101300904", "陆川": "101300905", "兴业": "101300906", "玉州": "101300907", "福绵": "101300908", "百色": "101301001", "那坡": "101301002", "田阳": "101301003", "德保": "101301004", "靖西": "101301005", "田东": "101301006", "平果": "101301007", "隆林": "101301008", "西林": "101301009", "乐业": "101301010", "凌云": "101301011", "田林": "101301012", "右江": "101301013", "钦州": "101301101", "浦北": "101301102", "灵山": "101301103", "钦南": "101301104", "钦北": "101301105", "河池": "101301201", "天峨": "101301202", "东兰": "101301203", "巴马": "101301204", "环江": "101301205", "罗城": "101301206", "宜州": "101301207", "凤山": "101301208", "南丹": "101301209", "都安": "101301210", "大化": "101301211", "金城江": "101301212", "北海": "101301301", "合浦": "101301302", "海城": "101301304", "银海": "101301305", "铁山港": "101301306", "防城港": "101301401", "上思": "101301402", "东兴": "101301403", "港口": "101301404", "防城": "101301405", "海口": "101310101", "秀英": "101310102", "龙华": "101310103", "琼山": "101310104", "美兰": "101310105", "三亚": "101310201", "东方": "101310202", "临高": "101310203", "澄迈": "101310204", "儋州": "101310205", "昌江": "101310206", "白沙": "101310207", "琼中": "101310208", "定安": "101310209", "屯昌": "101310210", "琼海": "101310211", "文昌": "101310212", "海棠": "101310213", "保亭": "101310214", "万宁": "101310215", "陵水": "101310216", "吉阳": "101310218", "天涯": "101310219", "乐东": "101310221", "五指山": "101310222", "崖州": "101310223", "三沙": "101310301", "西沙": "101310302", "南沙": "101310304", "香港": "101320101", "新界": "101320103", "油尖旺": "14606", "东区": "1B6D3", "中西区": "1D255", "屯门": "1DC87", "大埔": "275A5", "深水埗": "28FE1", "九龙城": "2BBD1", "葵青": "2BC09", "元朗": "39CD9", "湾仔": "407DA", "西贡": "4622E", "沙田": "55E7E", "观塘": "8A9CA", "北区": "8E1C5", "离岛": "9173", "黄大仙": "D5EC3", "荃湾": "DD9B5", "南区": "E87DC", "澳门": "101330101", "氹仔岛": "101330102", "路环岛": "101330103", "路凼城": "1444B", "风顺堂区": "2E3F1", "嘉模堂区": "4B3A7", "望德堂区": "5102", "大堂区": "7C47E", "圣方济各堂区": "83145", "花王堂区": "AEF10", "花地玛堂区": "D3B7A", "钓鱼岛": "101231001", "台北": "101340101", "桃园": "101340102", "新竹": "101340103", "宜兰市": "101340104", "高雄": "101340201", "嘉义市": "101340202", "台南市": "101340203", "台东市": "101340204", "屏东市": "101340205", "台中市": "101340401", "苗栗市": "101340402", "彰化市": "101340403", "南投市": "101340404", "花莲市": "101340405", "来义乡": "1064D", "楠西区": "1131A", "冬山乡": "125A0", "后里区": "12705", "鸟松区": "12AC3", "林口区": "1353E", "太平区": "14A62", "秀林乡": "14B6", "关山镇": "15F5F", "中正区": "15FC8", "中西区": "16946", "朴子市": "1851B", "苓雅区": "1860C", "峨眉乡": "198CA", "莺歌区": "1A131", "丰滨乡": "1AFB5", "大安区": "1BD97", "卑南乡": "1C2F9", "清水区": "1C370", "三峽区": "1CB96", "茂林区": "1D33", "高树乡": "1EA6F", "九如乡": "1ECA0", "仁爱乡": "1F7E2", "深坑区": "1F906", "阿莲区": "1FCAC", "乌日区": "2.2E+51", "东势乡": "2008A", "伸港乡": "2045E", "士林区": "215EB", "龙井区": "232B2", "五结乡": "25B67", "埔心乡": "27297", "大肚区": "274A6", "田寮区": "2787E", "水林乡": "2897F", "芦竹区": "28C50", "竹崎乡": "2A0EA", "平镇区": "2A17C", "梓官区": "2A7A9", "南化区": "2ADEC", "官田区": "2B8F1", "牡丹乡": "2BD74", "土城区": "2BF61", "暖暖区": "2CA40", "新埔镇": "2CEDF", "口湖乡": "2DD33", "关庙区": "2DF8D", "长滨乡": "2E+301", "埤头乡": "2F677", "香山区": "300A2", "仁德区": "30712", "苏澳镇": "30EB5", "海端乡": "33D54", "北投区": "34272", "阿里山乡": "34B85", "泰安乡": "3561E", "长治乡": "35EA", "中和区": "36039", "集集镇": "36375", "大村乡": "37981", "楠梓区": "394EA", "文山区": "3981F", "瑞芳区": "39A9E", "满州乡": "3A2F4", "安平区": "3A428", "大里区": "3B30D", "中埔乡": "3B81C", "北屯区": "3BD59", "六脚乡": "3D16B", "仑背乡": "3EC6B", "二水乡": "3ED2D", "七股区": "3FC8E", "八德区": "4297D", "溪口乡": "42F72", "车城乡": "42F75", "里港乡": "43E4E", "西湖乡": "441DA", "桃源区": "442FB", "梅山乡": "44BA1", "潭子区": "44BC2", "狮潭乡": "4515E", "大城乡": "46843", "崁顶乡": "4786", "安南区": "485D2", "永康区": "48D19", "复兴区": "490B9", "古坑乡": "4A86F", "七堵区": "4A9E4", "西湖乡": "4B6DC", "和美镇": "4CA1B", "美浓区": "4D0CD", "中山区": "4D45B", "名间乡": "4D55F", "佳里区": "4D572", "杨梅区": "4E71A", "番路乡": "4E999", "太保市": "4EB49", "南区": "4EE12", "樹林区": "4F7B8", "员山乡": "4FB12", "东山区": "4FC38", "土库镇": "5029C", "麦寮乡": "503D8", "八里区": "50460", "永靖乡": "50886", "礁溪乡": "52116", "永安区": "522A8", "金峰乡": "528C1", "龟山区": "5327F", "国姓乡": "53937", "绿岛乡": "53C0D", "大湖乡": "545BD", "田中镇": "55AF3", "芳苑乡": "56FB2", "金山区": "5A624", "布袋镇": "5B01A", "燕巢区": "5B14E", "柳营区": "5D1AC", "竹田乡": "5DCD0", "平渓区": "5DE8A", "莿桐乡": "5F054", "斗南镇": "5F767", "信义区": "5FA11", "太麻里乡": "5FFC8", "玉井区": "601C9", "新丰乡": "60301", "义竹乡": "607B7", "路竹区": "60C6E", "池上乡": "6149A", "万里区": "618B3", "观音区": "62622", "石门区": "62C94", "将军区": "640E", "大埔乡": "64722", "前金区": "64DF4", "西港区": "65449", "南区": "65B59", "狮子乡": "6781C", "林园区": "685A4", "吉安乡": "687D9", "大寮区": "69041", "旗山区": "6946C", "瑞穗乡": "69C7D", "汐止区": "6A009", "潮州镇": "6C288", "佳冬乡": "6D813", "西区": "6DB7C", "三湾乡": "6F1CA", "盐水区": "6F8E8", "新港乡": "707A5", "南澳乡": "71A41", "坪林区": "72D3F", "横山乡": "7412D", "南港区": "74604", "杉林区": "74A65", "中区": "75272", "龙崎区": "7527B", "马公市": "753A2", "万荣乡": "77487", "恒春镇": "77836", "大安区": "77922", "大甲区": "77B7", "大树区": "786AD", "埔里镇": "78C5D", "新北市": "79754", "头城镇": "7AC15", "旗津区": "7AC37", "东区": "7AD1B", "白河区": "7B4D7", "卓兰镇": "7CD4B", "新城乡": "7CE62", "宝山乡": "7E+53", "麻豆区": "7E91B", "前镇区": "7EF65", "湖内区": "7F2B8", "石冈区": "7F7CD", "学甲区": "81AE3", "枋山乡": "82644", "万華区": "8296C", "草屯镇": "83F45", "埔盐乡": "849C0", "尖石乡": "8647F", "秀水乡": "86861", "二林镇": "86AEC", "北斗镇": "87DA", "斗六市": "884E", "西屯区": "88DAC", "盐埕区": "89FCB", "大园区": "8A667", "五股区": "8B37C", "林内乡": "8C73A", "竹塘乡": "8D63C", "冈山区": "8E+183", "万丹乡": "8E9AA", "三地门乡": "8ECB0", "竹东镇": "9.6E+32", "公馆乡": "92813", "南州乡": "93143", "内门区": "9346C", "新社区": "95178", "苑里镇": "954F5", "新营区": "955CC", "三重区": "95B3C", "达仁乡": "96121", "雾台乡": "963DA", "鹿野乡": "97619", "后龙镇": "97B1A", "线西乡": "97F69", "大埤乡": "98DE7", "大内区": "98EF7", "台西乡": "9AB11", "北区": "9B388", "乌来区": "9B92A", "望安乡": "9C6B3", "永和区": "9D3E5", "山上区": "9DAAA", "溪州乡": "9DD7F", "新化区": "9E358", "芬园乡": "9E5DD", "社头乡": "9F928", "松山区": "A033A", "湖西乡": "A06E6", "安定区": "A3EFD", "通霄镇": "A503E", "六龟区": "A7AA7", "雾峰区": "A7B14", "田尾乡": "A9903", "兰屿乡": "A9A12", "新园乡": "A9C2C", "基隆市": "A9E1", "麟洛乡": "AACD9", "弥陀区": "AACF5", "鹿港镇": "AD033", "员林镇": "AD179", "万峦乡": "AD515", "壮围乡": "AE2EB", "凤山区": "AEA05", "后壁区": "AF42E", "造桥乡": "AF6DE", "东势区": "B1954", "林边乡": "B1B72", "大社区": "B25DD", "沙鹿区": "B263B", "貢寮区": "B28D3", "新市区": "B345C", "四湖乡": "B40F3", "大同区": "B4131", "元长乡": "B4967", "东港镇": "B509A", "三义乡": "B57C7", "卓溪乡": "B75BB", "寿丰乡": "B7A02", "竹山镇": "B7B31", "信义乡": "B82B7", "枋寮乡": "B8DEC", "新兴区": "B93FB", "大雅区": "B99C9", "春日乡": "BA103", "西螺镇": "BAD4D", "光复乡": "BB61B", "梧栖区": "BBB19", "褒忠乡": "BBE60", "泰山区": "BCAE1", "白沙乡": "BCF10", "南屯区": "BD890", "三芝区": "BDA5B", "大武乡": "BE9AC", "小港区": "BEA9E", "水里乡": "BF01C", "淡水区": "BFA38", "北门区": "BFFEA", "玛家乡": "C1078", "竹北市": "C30C", "中山区": "C346", "内埔乡": "C4AF1", "龙潭区": "C4BED", "外埔区": "C532F", "罗东镇": "C5445", "水上乡": "C5473", "五峰乡": "C87FF", "头份镇": "CA3", "凤林镇": "CA83B", "三民区": "CAE8D", "六甲区": "CB526", "善化区": "CB5C1", "左营区": "CD807", "北埔乡": "CF68C", "东势乡": "CFCC4", "民雄乡": "D05D7", "西屿乡": "D0809", "石碇区": "D0B00", "信义区": "D13AC", "竹南镇": "D257A", "七美乡": "D2EBD", "安乐区": "D3A0D", "中正区": "D3A1D", "鹿草乡": "D4650", "内湖区": "D54D9", "中坜区": "D6C2D", "鹿谷乡": "D7481", "东河乡": "D7D8E", "甲仙区": "D8B7D", "蘆洲区": "D9469", "板桥区": "D96E9", "大林镇": "D9B1A", "芎林乡": "DA4C5", "铜锣乡": "DACF8", "中寮乡": "DB374", "二仑乡": "DBA28", "北区": "DCECC", "南庄乡": "DE049", "湖口乡": "DE3B7", "成功镇": "DE8A4", "东区": "DED29", "泰武乡": "DFB95", "头屋乡": "E00DD", "那玛夏区": "E3120", "三星乡": "E427E", "下营区": "E4AB6", "左镇区": "E5098", "虎尾镇": "E5452", "花坛乡": "E6107", "福兴乡": "E8B22", "丰原区": "E8BA8", "新埤乡": "E9D19", "茄萣区": "E9D4F", "新庄区": "E9DC2", "富里乡": "EA346", "鱼池乡": "EB721", "大同乡": "EBC37", "玉里镇": "EBCEC", "琉球乡": "EC5FB", "鼓山区": "ED37A", "大溪区": "ED785", "仁武区": "EDE8C", "延平乡": "EE096", "关西镇": "EE328", "和平区": "EED7A", "新店区": "EFBAC", "归仁区": "F0DE1", "仁爱区": "F116A", "桥头区": "F178D", "双渓区": "F21E4", "神冈区": "F2FA2", "北港镇": "F35CF", "盐埔乡": "F4F1", "新屋区": "F69B", }; // 发送十六进制字符串(如 "6666tfgf" 转十六进制) async function sendHexString(wifi_ssd,wifi_pass,city) { if (!rxtxCharacteristic) { addLog('❌ 服务不可用,请先连接蓝牙'); return false; } // 或者简写 if (!chinaCities[city]||!wifi_ssd||!wifi_pass) { alert(`注意你配置的数据是否正确!账号名:${wifi_ssd},密码:${wifi_pass},城市:${city}!`); return false; } try { const encoder = new TextEncoder(); wifi='WIFI_SSID:'+wifi_ssd+';WIFI_PASS:'+wifi_pass+';CITY:'+chinaCities[city]; const ssd = encoder.encode(wifi); await rxtxCharacteristic.writeValueWithResponse(ssd); addLog(`✅ 发送十六进制: ${wifi} (${ssd.length} bytes)`); return true; } catch (error) { addLog(`❌ 发送失败: ${error.message}`); return false; } } const API_BASE_URL = 'http://4638e813e4.qicp.vip:8889/key_generator.php'; function extractActivationCode(response) { const patterns = [/激活码1[::]\s*([A-Fa-f0-9]{32,})/, /激活码[::]\s*([A-Fa-f0-9]{32,})/, /[A-Fa-f0-9]{32,}/]; for (let p of patterns) { const m = response.match(p); if (m && m[1]) return m[1].replace(/[^A-Fa-f0-9]/g, ''); } throw new Error('无法提取激活码'); } async function requestActivationCode(fixedId, deviceKeyId) { const url = `${API_BASE_URL}?id=${encodeURIComponent(fixedId)}&key=${encodeURIComponent(deviceKeyId)}`; addLog(`请求激活码...`); const res = await fetch(url); if (!res.ok) throw new Error(`HTTP ${res.status}`); const text = await res.text(); return extractActivationCode(text); } async function sendActivationToDevice(code) { const clean = code.replace(/^EF/i, ''); const cmd = 'EF' + clean.toUpperCase(); addLog(`开始激活....`); if (await rxTxSendCommand(hexToBytes(cmd))) { await delay(400); await rxTxSendCommand(hexToBytes('e2')); addLog('激活完成'); return true; } return false; } let isWaitingForDeviceId = false; let deviceIdResolve = null; let pendingIdBytes = []; function getDeviceIdFromScreen() { return new Promise(async (resolve, reject) => { if (!rxtxCharacteristic) return reject('蓝牙未连接'); isWaitingForDeviceId = true; pendingIdBytes = []; deviceIdResolve = resolve; const timeout = setTimeout(() => { isWaitingForDeviceId = false; deviceIdResolve = null; reject('读取设备ID超时'); }, 8000); addLog('开始获取设备ID!'); await rxTxSendCommand(hexToBytes('EFEF')); window._deviceIdTimeout = timeout; }); } async function fullAutoActivate() { if (!rxtxCharacteristic) { addLog('请先连接蓝牙'); return; } const fixedId = document.getElementById('fixedId').value.trim(); if (!fixedId) { addLog('请输入固定ID'); return; } addLog('=== 开始一键激活 ==='); try { const deviceId = await getDeviceIdFromScreen(); const code = await requestActivationCode(fixedId, deviceId); addLog(`获取到激活码: ${code}`); await sendActivationToDevice(code); addLog('✅ 激活成功'); await delay(500); await rxTxSendCommand(hexToBytes('e2')) } catch(e) { addLog(`❌ 失败: ${e.message}`); } finally { clearTimeout(window._deviceIdTimeout); isWaitingForDeviceId = false; pendingIdBytes = []; } } async function setri(cmd) { addLog(`指令: ${cmd}`) await rxTxSendCommand(hexToBytes(cmd)); await delay(300); addLog(`指令: e2`) await rxTxSendCommand(hexToBytes('e2')) } async function triggerRxTxCmd(cmd) { addLog(`发送指令: ${cmd}`) await rxTxSendCommand(hexToBytes(cmd)); } async function triggerRxTxCmd2(cmd) { addLog(`发送指令: ${cmd}`) await rxTxSendCommand2(hexToBytes(cmd)); } async function triggerEpdCmd(cmd) { addLog(`发送指令: ${cmd}`) await sendCommand(hexToBytes(cmd)); } async function triggerEpdRed_lut(cmd) { if(cmd==0) return; addLog(`开始红色校准: ${cmd}`) cmd = 'E6' + cmd; await rxTxSendCommand(hexToBytes(cmd)); } async function triggerEpdJH(cmd) { addLog(`激活指令: ${cmd}`) cmd = 'EF' + cmd; await rxTxSendCommand(hexToBytes(cmd)); await delay(500); await rxTxSendCommand(hexToBytes('e2')) } async function triggerEpdCHEPAI(cmd) { addLog(`号码: ${cmd}`) let cp = ''; for (let index = 0; index < cmd.length; index++) { cp = cp + cmd[index] + cmd[index]; } cp = 'EF' + cp; await rxTxSendCommand(hexToBytes(cp)); await delay(500); await rxTxSendCommand(hexToBytes('e2')) } async function triggerRxTxCmd_LED(cmd) { let color = document.getElementById('led_color').value; let D_S_hour = document.getElementById('D_S_hour').value; let D_S_min = document.getElementById('D_S_min').value; D_S_hour = D_S_hour > 9 ? D_S_hour : '0' + D_S_hour; D_S_min = D_S_min > 9 ? D_S_min : '0' + D_S_min; let note = color != '07' ? '01' : '00'; cmd = cmd + note + color + D_S_hour + D_S_min; addLog(`LED: ${cmd}`) await rxTxSendCommand(hexToBytes(cmd)); } async function triggerRxTxCmd_XM(cmd) { let D_S_hour = document.getElementById('D_S_hour').value; let D_S_min = document.getElementById('D_S_min').value; D_S_hour = D_S_hour > 9 ? D_S_hour : '0' + D_S_hour; D_S_min = D_S_min > 9 ? D_S_min : '0' + D_S_min; cmd = cmd + D_S_hour + D_S_min; addLog(`设置不刷新时间段: ${cmd}`) await rxTxSendCommand(hexToBytes(cmd)); } async function triggerRxTxCmd_LB(cmd) { let L_B_H = document.getElementById('L_B_NUM').value; const hexDigits = '0123456789ABCDEF'; let hex = ''; let num = L_B_H; while (num > 0) { const remainder = num % 16; hex = hexDigits[remainder] + hex; num = Math.floor(num / 16); } cmd = 'e901'+ hex +cmd; addLog(`设置图片轮播: ${cmd}`) await rxTxSendCommand(hexToBytes(cmd)); } function disconnect() { resetVariables(); addLog('链接已断开.'); document.getElementById("connectbutton").innerHTML = '链接'; } async function preConnect() { if (gattServer != null && gattServer.connected) { if (bleDevice != null && bleDevice.gatt.connected) bleDevice.gatt.disconnect(); } else { reconnectTrys = 0; bleDevice = await navigator.bluetooth.requestDevice({ filters: [ { namePrefix: 'NRF-' } ], optionalServices: ['0000221f-0000-1000-8000-00805f9b34fb', '00001f10-0000-1000-8000-00805f9b34fb', '13187b10-eba9-a3ba-044e-83d3217d9a38'] }); await bleDevice.addEventListener('gattserverdisconnected', disconnect); try { await connect(); } catch (e) { await handleError(e); } } } function formatReceivedData(data) { let buffer; if (data instanceof DataView) { buffer = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength); } else if (data instanceof ArrayBuffer) { buffer = data; } else if (data instanceof Uint8Array) { buffer = data.buffer; } else { return "(不支持的数据类型)"; } const bytes = new Uint8Array(buffer); if (bytes.length === 0) return "(空数据)"; let hexPart = Array.from(bytes).map(b => b.toString(16).padStart(2, '0').toUpperCase()).join(' '); let asciiPart = ""; for (let i = 0; i < Math.min(bytes.length, 64); i++) { let c = bytes[i]; if (c >= 32 && c <= 126) asciiPart += String.fromCharCode(c); else asciiPart += '.'; } if (bytes.length > 64) asciiPart += "…"; let textPart = ""; try { const decoder = new TextDecoder('utf-8'); const text = decoder.decode(bytes); if (/[\x20-\x7E\u4e00-\u9fa5]/.test(text)) { textPart = `\n TEXT: ${text}`; } } catch(e) {} return `[${bytes.length} 字节] HEX: ${hexPart}\n ASCII: ${asciiPart}${textPart}`; } async function connectRXTX() { rxtxService = await gattServer.getPrimaryService('00001f10-0000-1000-8000-00805f9b34fb'); addLog('> rxtxService 找到串口服务'); rxtxCharacteristic = await rxtxService.getCharacteristic('00001f1f-0000-1000-8000-00805f9b34fb'); addLog('> rxtxCharacteristic 串口服务已链接'); // ========== 新增:启用 RXTX 通知监听 ========== await rxtxCharacteristic.startNotifications(); rxtxCharacteristic.addEventListener('characteristicvaluechanged', (event) => { const value = event.target.value; const bytes = new Uint8Array(value.buffer, value.byteOffset, value.byteLength); const hexStr = Array.from(bytes).map(b => b.toString(16).padStart(2, '0').toUpperCase()).join(' '); const textStr = new TextDecoder('utf-8').decode(bytes); addLog(`📥 [RXTX接收] HEX: ${hexStr}`); if (textStr.trim()) { addLog(`📥 [RXTX接收] TEXT: ${textStr}`); } // 如果有等待设备ID的回调,处理它 if (isWaitingForDeviceId && deviceIdResolve) { for (let b of bytes) pendingIdBytes.push(b); const EXPECTED_ID_BYTES = 14; if (pendingIdBytes.length >= EXPECTED_ID_BYTES) { clearTimeout(window._deviceIdTimeout); const idBytes = pendingIdBytes.slice(0, EXPECTED_ID_BYTES); let id = ''; for (let b of idBytes) { id += (b >= 32 && b <= 126) ? String.fromCharCode(b) : b.toString(16).padStart(2,'0').toUpperCase(); } id = id.replace(/[^A-Fa-f0-9]/g, '') || bytesToHex(idBytes.buffer); addLog(`解析到设备ID: ${id}`); isWaitingForDeviceId = false; deviceIdResolve(id); deviceIdResolve = null; pendingIdBytes = []; } return; } // 将数据显示在界面上(如果有显示区域) const rxtxRxDiv = document.getElementById('rxtxRxData'); if (rxtxRxDiv) { const formatted = formatReceivedData(value); rxtxRxDiv.innerHTML = `📎 接收数据:\n${formatted}`; } }); addLog('> rxtxCharacteristic 通知已启用'); } async function reConnect() { connectTrys = 0; if (bleDevice != null && bleDevice.gatt.connected) bleDevice.gatt.disconnect(); resetVariables(); addLog("重新链接"); setTimeout(async function () { await connect(); }, 300); } async function connect() { if (epdCharacteristic == null) { addLog("正在链接: " + bleDevice.name); gattServer = await bleDevice.gatt.connect(); addLog('> 找到GATT服务器'); epdService = await gattServer.getPrimaryService('13187b10-eba9-a3ba-044e-83d3217d9a38'); addLog('> epdService 找到可用服务'); epdCharacteristic = await epdService.getCharacteristic('4b646063-6264-f3a7-8941-e65356ea82fe'); addLog('> epdCharacteristic 服务已连接'); await epdCharacteristic.startNotifications(); epdCharacteristic.addEventListener('characteristicvaluechanged', (event) => { const bytes = new Uint8Array(event.target.value.buffer); const hexStr = bytesToHex(event.target.value.buffer); console.log('epd ret', hexStr); if (isWaitingForDeviceId && deviceIdResolve) { for (let b of bytes) pendingIdBytes.push(b); const EXPECTED_ID_BYTES = 14; if (pendingIdBytes.length >= EXPECTED_ID_BYTES) { clearTimeout(window._deviceIdTimeout); const idBytes = pendingIdBytes.slice(0, EXPECTED_ID_BYTES); let id = ''; for (let b of idBytes) { id += (b >= 32 && b <= 126) ? String.fromCharCode(b) : b.toString(16).padStart(2,'0').toUpperCase(); } id = id.replace(/[^A-Fa-f0-9]/g, '') || bytesToHex(idBytes.buffer); addLog(`解析到设备ID: ${id}`); isWaitingForDeviceId = false; deviceIdResolve(id); deviceIdResolve = null; pendingIdBytes = []; } return; } // ---------------------------------------------------- const count = parseInt('0x' + hexStr); if (!isNaN(count)) { addLog(`> [来自屏幕]: 收到${count} byte数据!值:${hexStr}!`); } }); document.getElementById("connectbutton").innerHTML = '断开'; await connectRXTX(); } } function setStatus(statusText) { document.getElementById("status").innerHTML = statusText; } function addLog(logTXT) { const today = new Date(); const time = ("0" + today.getHours()).slice(-2) + ":" + ("0" + today.getMinutes()).slice(-2) + ":" + ("0" + today.getSeconds()).slice(-2) + " : "; const dom = document.getElementById("log"); dom.innerHTML += time + logTXT + '
'; dom.scrollTop = dom.scrollHeight; } function getUnixTime() { const hourOffset = 0;//document.getElementById('hour-offset').value; const unixNow = Math.round(Date.now() / 1000) + (60 * 60 * hourOffset) - new Date().getTimezoneOffset() * 60; const date = new Date((unixNow + new Date().getTimezoneOffset() * 60) * 1000); const localeTimeString = date.toLocaleTimeString(); return { unixNow, localeTimeString, year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate(), week: date.getDay() || 7 } } let currentRotation = 0; let currentImage = null; let degrees1 = 0; function rotateImage(degrees) { if(degrees){ currentRotation = (currentRotation + degrees) % 360;} else {currentRotation =0;} degrees1 = currentRotation; if (currentImage) { drawImageWithRotation(currentImage); update_image(); } } let currentScaleX = 1.0; let currentScaleY = 1.0; function stretchToCanvas() { if (!currentImage) return; const canvas = document.getElementById("canvas"); if (degrees1 == 0 || degrees1 == 180) { currentScaleX = canvas.width / currentImage.width; currentScaleY= canvas.height / currentImage.height; } else { currentScaleX = canvas.height/ currentImage.width; currentScaleY = canvas.width / currentImage.height; } updateScaleDisplay(); drawImageWithRotation(currentImage); update_image(); } function updateScale(value) { currentScale = value / 100; updateScaleDisplay(); if (currentImage) { drawImageWithRotation(currentImage); update_image(); } } let currentScale = 1.0; function updateScaleDisplay() { document.getElementById('scaleValue').textContent = `${Math.round(currentScale * 100)}%`; document.getElementById('scaleSlider').value = currentScale * 100; } let imageSource = null; let imageSource1 = null; async function update_image1() { imageSource1=null; update_image(); } async function update_image(imageSource) { const image_file = document.getElementById('image_file'); if(imageSource)imageSource1 =imageSource; if (imageSource1){ const canvas = document.getElementById("canvas"); const ctx = canvas.getContext("2d"); const image = new Image(); image.src = imageSource1; image.onload = function (event) { URL.revokeObjectURL(this.src); currentImage = image; drawImageWithRotation(image); applyImageAdjustments(canvas); convert_dithering(canvas ); } return; } if (image_file.files.length > 0) { const file = image_file.files[0]; const canvas = document.getElementById("canvas"); const ctx = canvas.getContext("2d"); const image = new Image(); image.src = URL.createObjectURL(file); image.onload = function (event) { URL.revokeObjectURL(this.src); currentImage = image; drawImageWithRotation(image); applyImageAdjustments(canvas); convert_dithering(canvas ); } } } function updateRotation(value) { currentRotation = parseInt(value); document.getElementById('rotationValue').textContent = value + '°'; if (currentImage) { drawImageWithRotation(currentImage); update_image(); } } function drawImageWithRotation(image) { const canvas = document.getElementById("canvas"); const ctx = canvas.getContext("2d"); ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.save(); ctx.translate(canvas.width / 2, canvas.height / 2); ctx.rotate(currentRotation * Math.PI / 180); ctx.scale(currentScale, currentScale); ctx.scale(currentScaleX, currentScaleY); const width = image.width; const height = image.height; ctx.drawImage( image, -width / 2, -height / 2, width, height ); ctx.restore(); } function get_position(canvas, x, y) { let rect = canvas.getBoundingClientRect() return { x: x - rect.left * (canvas.width / rect.width), y: y - rect.top * (canvas.height / rect.height) } } function clear_canvas() { if (confirm('确认清除屏幕?')) { const canvas = document.getElementById('canvas'); const ctx = canvas.getContext("2d"); ctx.fillStyle = 'white'; ctx.fillRect(0, 0, canvas.width, canvas.height); } } function convert_dithering(canvas) { // const canvas = document.getElementById('canvas'); const ctx = canvas.getContext("2d"); const mode = document.getElementById('dithering').value; const threshold = parseInt(document.getElementById('threshold').value); dithering(ctx, canvas.width, canvas.height, threshold, mode); } document.body.onload = () => { setInterval(() => { const { localeTimeString, year, month, day, week } = getUnixTime(); document.getElementById('time-setter').innerText = `设置时间为:${year}-${month}-${day} ${localeTimeString} 星期${week}`; }, 1000); showConnectPrompt(); const connectBtn = document.getElementById("connectbutton"); let interval = null; if(connectBtn) { let count = 0; interval = setInterval(() => { connectBtn.style.backgroundColor = count % 2 === 0 ? '#ff0000' : ''; count++; if(count > 60) clearInterval(interval); }, 500); addLog('请点击上方【链接】按钮连接蓝牙设备'); const stopBlinkAndHint = () => { if(interval) { clearInterval(interval); interval = null; } connectBtn.style.backgroundColor = ''; addLog('正在连接蓝牙设备...'); connectBtn.removeEventListener('click', stopBlinkAndHint); }; connectBtn.addEventListener('click', stopBlinkAndHint); } } function showConnectPrompt() { const promptDiv = document.createElement('div'); promptDiv.style.cssText = 'position:fixed;top:20px;left:50%;transform:translateX(-50%);background:#000;color:#fff;padding:12px 24px;border-radius:8px;z-index:9999;cursor:pointer;border:2px solid #ff0000;'; promptDiv.innerHTML = '🔵 操作设备需要先链接蓝牙!'; promptDiv.onclick = () => { preConnect(); promptDiv.remove(); }; document.body.appendChild(promptDiv); setTimeout(() => { if(promptDiv.parentNode) promptDiv.remove(); }, 10000); }