快递单、运单号自动联想功能
做电子商务的,都需要设计到扫描快递单。
如果是批量速打的话,能够将运单号联想起来,将会带来许多方便。
就目前仅知道的几家快递公司的规律,小弟做出一个运单号联想的web版,共享出来。
demo需要使用Jquery.
/*
2012.10.12 vinbo
请对文本框统一使用类名:
ec_logistics
请使用<input type="hidden" id="EC_ExpressCode" value="STO" />设置快递单编码格式
**/
var EC_ArrayLength = 500; //设置最多的500个面单(因为快递面单是500个一箱)
var FirstCode = ""; //记录扫描的第一个单号
var EC_defultCssName = ".ec_logistics";//默认的文本框样式名称
var EC_logistics; //所有的文本框列表 jquery对象
var startIndex = 0; //用于记录当前扫描时候选中的文本的 索引。以后的自动联想,从这个开始。
$(document).ready(function () {
var ecode = $("#EC_ExpressCode").val();
EC_logistics = $(EC_defultCssName); //所有的文本框
//文本框的变更事件
EC_logistics.keydown(function (e) {
if (e.keyCode == 13) {
var index = $(this).index(EC_defultCssName);
startIndex = index;
FirstCode = $(this).val();
index = index + 1;
if (index == EC_logistics.length) {
return;
} else {
AllotExpressCodeAuto(ecode);
$(EC_defultCssName + ":eq(" + index + ")").select();
}
}
});
//自动分配运单号
AllotExpressCodeAuto = function (ExpressCode) {
var strArray;//获取自动联想得到的数组
switch (ExpressCode) {
case "STO":
strArray = STO();
break;
case "YTO":
strArray = YTO();
break;
case "EMS":
strArray = EMS();
break;
case "SF":
strArray = SF();
break;
default:
strArray = GENERAL();
break;
}
var len = strArray.length;
$.each(EC_logistics, function (i) {
if (i > len) {
$(EC_defultCssName + ":eq(" + i + ")").select(); //数组循环完毕,将鼠标放到最后一行
return;
}
else if (i < startIndex) {
//跳入下一个循环
}
else {
$(this).val(strArray[i - startIndex]);//显示文字
}
});
}
//申通
STO = function () {
return GETARRAY();
}
//圆通
YTO = function () {
return GETARRAY();
}
//EMS
EMS = function () {
return GETARRAY_EMS();
}
//顺丰
SF = function () {
return GETARRAY_SF();
}
//一般方法。只显示扫描上来的一个运单号
GENERAL = function () {
var strValue = new Array(1);
strValue[0] = FirstCode;
return strValue;
}
//自增长型数组
GETARRAY = function () {
var strstart = FirstCode.substr(0, FirstCode.length - 5); //截取留下5位数字的字符串
var num = FirstCode.substr(FirstCode.length - 5, 5); //截取剩余的数字
var firstNum = parseInt(num); //将剩余的数字字符创转换成为 int类型
var count = firstNum % EC_ArrayLength; //获取剩下的数组的长度。如果传入500的整数,长度是本身,如果传入001,长度就是500,如果传入499,999的尾数,长度就是2
var length = ((EC_ArrayLength - count) % EC_ArrayLength) + 1;
//建立一个数组
var strValue = new Array(length);
strValue[0] = FirstCode;
//默认放入第一个,将扫描出来的结果
for (var j = 1; j < length; j++) {
strValue[j] = strstart.toString() + (firstNum + j).toPrecision(5);
}
return strValue;
}
GETARRAY_EMS = function () {
var fri;
var num3, num4, num5, num6, num7, num8, num9, num0;
var res;
var mid;
var i;
var EMSres = new Array(EC_ArrayLength);
fri = FirstCode.substr(2, 8);
var firstM2 = FirstCode.substr(0, 2);
var lastM2 = FirstCode.substr(FirstCode.length - 2, 2);
for (i = 1; i <= EC_ArrayLength; i++) {
num3 = parseInt(fri.substr(0, 1));
num4 = parseInt(fri.substr(1, 1));
num5 = parseInt(fri.substr(2, 1));
num6 = parseInt(fri.substr(3, 1));
num7 = parseInt(fri.substr(4, 1));
num8 = parseInt(fri.substr(5, 1));
num9 = parseInt(fri.substr(6, 1));
num0 = parseInt(fri.substr(7, 1));
mid = 8 * num3 + 6 * num4 + 4 * num5 + 2 * num6 + 3 * num7 + 5 * num8 + 9 * num9 + 7 * num0;
res = 11 - (mid % 11);
if (res == 10)
res = 0;
else if (res == 11)
res = 5;
EMSres[i - 1] = firstM2 + fri + res.toString() + lastM2;
fri = (parseInt(fri) + 1).toString();
}
return EMSres;
}
GETARRAY_SF = function () {
//声明
var fri, Nfri, YunDanHao;
var num1, num2, num3, num4, num5, num6, num7, num8, num9, num10, num11, num12;
var Num1, Num2, Num3, Num4, Num5, Num6, Num7, Num8, Num9, Num10, Num11, Num12;
var res;
var mid;
var i;
var SFSres = new Array(EC_ArrayLength);
//赋值
fri = FirstCode.substr(0, 11);
SFSres[0] = FirstCode;
YunDanHao = FirstCode;
for (i = 1; i <= EC_ArrayLength - 1; i++) {
Nfri = (parseFloat(fri) + 1).toString();
var j = 0;
num1 = parseInt(YunDanHao.substr(j++, 1));
num2 = parseInt(YunDanHao.substr(j++, 1));
num3 = parseInt(YunDanHao.substr(j++, 1));
num4 = parseInt(YunDanHao.substr(j++, 1));
num5 = parseInt(YunDanHao.substr(j++, 1));
num6 = parseInt(YunDanHao.substr(j++, 1));
num7 = parseInt(YunDanHao.substr(j++, 1));
num8 = parseInt(YunDanHao.substr(j++, 1));
num9 = parseInt(YunDanHao.substr(j++, 1));
num10 = parseInt(YunDanHao.substr(j++, 1));
num11 = parseInt(YunDanHao.substr(j++, 1));
num12 = parseInt(YunDanHao.substr(j++, 1));
j = 0;
Num1 = parseInt(Nfri.substr(j++, 1));
Num2 = parseInt(Nfri.substr(j++, 1));
Num3 = parseInt(Nfri.substr(j++, 1));
Num4 = parseInt(Nfri.substr(j++, 1));
Num5 = parseInt(Nfri.substr(j++, 1));
Num6 = parseInt(Nfri.substr(j++, 1));
Num7 = parseInt(Nfri.substr(j++, 1));
Num8 = parseInt(Nfri.substr(j++, 1));
Num9 = parseInt(Nfri.substr(j++, 1));
Num10 = parseInt(Nfri.substr(j++, 1));
Num11 = parseInt(Nfri.substr(j++, 1));
if (((Num9 - num9) == 1) && ((num9 % 2) == 1)) {
if (num12 - 8 >= 0)
Num12 = num12 - 8;
else
Num12 = num12 - 8 + 10;
}
else if (((Num9 - num9) == 1) && ((num9 % 2) == 0)) {
if (num12 - 7 >= 0)
Num12 = num12 - 7;
else
Num12 = num12 - 7 + 10;
}
else {
if ((num10 == 3) || (num10 == 6) && (num11 == 9)) {
if (num12 - 5 >= 0)
Num12 = num12 - 5;
else
Num12 = num12 - 5 + 10;
}
else if (num11 == 9) {
if (num12 - 4 >= 0)
Num12 = num12 - 4;
else
Num12 = num12 - 4 + 10;
}
else {
if (num12 - 1 >= 0)
Num12 = num12 - 1;
else
Num12 = num12 - 1 + 10;
}
}
SFSres[i] = (Nfri + (Num12).toString());
YunDanHao = Nfri + Num12.toString();
fri = (parseFloat(fri) + 1).toString();
} //循环结束
return SFSres;
}
});
接下来是页面:
<html> <head> <title>测试显示运单号</title> <script src="jquery.js" type="text/javascript"></script> <script src="ExpressCode.js" type="text/javascript"></script> </head> <body> <input class="ec_logistics" type="text" /><br/> <input class="ec_logistics" type="text" /><br/> <input class="ec_logistics" type="text" /><br/> <input class="ec_logistics" type="text" /><br/> <input class="ec_logistics" type="text" /><br/> <input class="ec_logistics" type="text" /><br/> <input class="ec_logistics" type="text" /><br/> <input class="ec_logistics" type="text" /><br/> <input class="ec_logistics" type="text" /><br/> <input type="hidden" id="EC_ExpressCode" value="STO" /><!--在这个隐藏文本框,设置快递公司的编号。 圆通:YTO,申通:STO,顺丰:SF,EMS:EMS,联昊通:LHT,详情参见淘宝给出的具体编码。 --> </body> </html>
目前仅有的支持 SF,EMS,STO,YTO 等常见的。其他的因为没有完整的快递单查看,不清楚具体规律。
浙公网安备 33010602011771号