zoukankan      html  css  js  c++  java
  • 快递单、运单号自动联想功能

    做电子商务的,都需要设计到扫描快递单。

    如果是批量速打的话,能够将运单号联想起来,将会带来许多方便。

    就目前仅知道的几家快递公司的规律,小弟做出一个运单号联想的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 等常见的。其他的因为没有完整的快递单查看,不清楚具体规律。

  • 相关阅读:
    android不知不觉偷拍他人功能实现(手机关闭依然拍照)【申明:来源于网络】
    地图标绘系统V1.0测试版【申明:来源于网络】
    AngularJS资源合集[备忘]【申明:来源于网络】
    java+js实现展示本地文件夹下的所有图片demo[申明:来源于网络]
    angular源码分析 摘抄 王大鹏 博客 directive指令及系列
    jQuery学习之prop和attr的区别
    顽Shi的实践总结
    URL 中#号,? ,&的作用 (摘抄整理 链接为学习地址)
    YeoMan 与Angularjs
    an'gularjs 环境搭建之NodeJS、NPM安装配置步骤(windows版本)
  • 原文地址:https://www.cnblogs.com/xwb2535/p/2721377.html
Copyright © 2011-2022 走看看