随笔 - 809  文章 - 0 评论 - 144 阅读 - 770万

 

下载下来是个txt文本里面的代码如下:

-------------------------------------------------------

复制代码
/////////////////////////////////////////
qq:654362790     o(∩_∩)o 哈哈
/////////////////////////////////////////

function TForm1.EMS(EMSNo: string;num:integer):TStringList;
var
        fri:string;
        res:Integer;
        num3,num4,num5,num6,num7,num8,num9,num0:Integer;
        mid:Integer;
        I:integer;
        EMSres:TStringList;
begin
        EMSres:=TStringList.Create;
        fri:=Copy(EMSNo,3,8)  ;
        for i:=1 to  num do
        begin
          num3:=StrToInt(Copy(fri,1,1));
          num4:=StrToInt(Copy(fri,2,1));
          num5:=StrToInt(Copy(fri,3,1));
          num6:=StrToInt(Copy(fri,4,1));
          num7:=StrToInt(Copy(fri,5,1));
          num8:=StrToInt(Copy(fri,6,1));
          num9:=StrToInt(Copy(fri,7,1));
          num0:=StrToInt(Copy(fri,8,1));
          mid:= 8*num3+6*num4+4*num5+2*num6+3*num7+5*num8+9*num9+7*num0 ;
          res:=11-(mid)mod(11);
          if res=10 then
                res:=0;
          if res=11 then
                res:=5;
          EMSres.Add('EI'+fri+IntToStr(res)+'CN');
          fri:=IntToStr(strtoint(fri)+1);
        end;
        result:=EMSres;
end;

function TForm1.ShunFeng(ShunFengNo: string;num:integer):TStringList;
var
        fri,Nfri,Yuandanhao:string;
        res:Double;
        num1,num2,num3,num4,num5,num6,num7,num8,num9,num10,num11,num12:Integer;
        Nnum1,Nnum2,Nnum3,Nnum4,Nnum5,Nnum6,Nnum7,Nnum8,Nnum9,Nnum10,Nnum11,Nnum12:Integer;
        mid:Integer;
        I:integer;
        ShunFengres:TStringList;
begin
        ShunFengres:=TStringList.Create;
        fri:=Copy(ShunFengNo,1,11)  ;
        ShunFengres.Add(ShunFengNo);
        Yuandanhao:=ShunFengNo;
        for i:=1 to  num-1 do
        begin
          Nfri:=FloatToStr(StrToFloat(fri)+1);
          num1:=StrToInt(Copy(Yuandanhao,1,1));
          num2:=StrToInt(Copy(Yuandanhao,2,1));
          num3:=StrToInt(Copy(Yuandanhao,3,1));
          num4:=StrToInt(Copy(Yuandanhao,4,1));
          num5:=StrToInt(Copy(Yuandanhao,5,1));
          num6:=StrToInt(Copy(Yuandanhao,6,1));
          num7:=StrToInt(Copy(Yuandanhao,7,1));
          num8:=StrToInt(Copy(Yuandanhao,8,1));
          num9:=StrToInt(Copy(Yuandanhao,9,1));
          num10:=StrToInt(Copy(Yuandanhao,10,1));
          num11:=StrToInt(Copy(Yuandanhao,11,1));
          num12:=StrToInt(Copy(Yuandanhao,12,1));  //12????óD£??í11??£?ìí?óá???±?á?′?′¢?-ê??±

          Nnum1:=StrToInt(Copy(Nfri,1,1));
          Nnum2:=StrToInt(Copy(Nfri,2,1));
          Nnum3:=StrToInt(Copy(Nfri,3,1));
          Nnum4:=StrToInt(Copy(Nfri,4,1));
          Nnum5:=StrToInt(Copy(Nfri,5,1));
          Nnum6:=StrToInt(Copy(Nfri,6,1));
          Nnum7:=StrToInt(Copy(Nfri,7,1));
          Nnum8:=StrToInt(Copy(Nfri,8,1));
          Nnum9:=StrToInt(Copy(Nfri,9,1));
          Nnum10:=StrToInt(Copy(Nfri,10,1));
          Nnum11:=StrToInt(Copy(Nfri,11,1));
          if (Nnum9-num9=1) and ((num9)mod(2)=1)  then
          begin
            if   num12-8 >=0 then
               Nnum12:=num12-8             // -8
            else
               Nnum12:= num12-8 +10
          end
          else if (Nnum9-num9=1) and ((num9)mod(2)=0)  then
          begin
            if   num12-7 >=0 then
               Nnum12:=num12-7             // -7
            else
               Nnum12:= num12-7 +10
          end
          else
          begin
            if ((num10=3)or(num10=6))and(num11=9) then
            begin
              if   num12-5 >=0 then
                 Nnum12:=num12-5             // -5
              else
                 Nnum12:= num12-5 +10
            end
            else if   (num11=9) then
            begin
              if   num12-4 >=0 then
                 Nnum12:=num12-4             // -4
              else
                 Nnum12:= num12-4 +10
            end
            else
            begin
              if   num12-1 >=0 then
                 Nnum12:=num12-1            // -1
              else
                 Nnum12:= num12-1 +10
            end;
          end;
          ShunFengres.Add(Nfri+IntToStr(Nnum12));
          Yuandanhao:=Nfri+IntToStr(Nnum12);
          fri:=FloatToStr(StrToFloat(fri)+1);
        end;
        result:=ShunFengres;
end;
复制代码

------------------

另外两个帖子:http://bbs.paidai.com/topic/76928

 

复制代码
过年了,祝大家新年快乐。

一个人在家实在无聊,想起一直没有解决的问题:EMS快递单打印如何实现自动填充?百度了一下,终于解决了,按耐不住心中的高兴,分享给各位派友。

EMS运单排列规则:

1、快递面单的前8位数字是按照顺序排列的

2、最后一位数字看似杂乱无章,但其实是用一个公式计算出来的。

计算规则如下:

1、X=第一位数字*8+第二位数字*6+第三位数字*4+第四位数字*2+第五位数字*3+第六位数字*5+第七位数字*9+第八位数字*7

2、计算X/11得出的余数=Y

3、计算Z=11-Y

       当Z=10时,最后一位数字是0

       当Z=11时,最后一位数字是5

       当Z<10时,最后一位数字是Z



附配套的EXCEL下载文件http://x.paidai.com/view/18411



顺丰运单排列规则:

如果单量不大的话,可以去顺丰官方网站下载套打程序,下载地址http://www.sf-express.com/cn/sc/delivery_step/fill_waybill/waybill_printing.html

我根据这个套打程序自动回填的运单信息对运单规则做了推导,有兴趣的派友可以验证一下,是否有错误的地方。

推导的规则如下:

前11位数字是按照顺序排列,最后一位数字是根据一定原理推导出来的:

1、当第11位数不等于9时,第二张运单的最后一位数字=上一张运单最后一位数字+9,取结果的个位数



2、当第11位数字=9时,看第10位数字的规律

    当第10位数字=0,1,2,4,5,7,8时,第二张运单的最后一位数字=上一张运单最后一位数字+6,取结果的个位数

    当第10位数字=3,6时,第二张运单的最后一位数字=上一张运单最后一位数字+5,取结果的个位数



3、当第11位数字、第10位数字都等于9时,看第9位数字的规律

    当第9位数字=0,2,4,6,8时,第二张运单最后一位数字=上一张运单最后一位数字+3,取结果的个位数

    当第9位数字=1,3,5,7时,第二张运单最后一位数字=上一张运单最后一位数字+2,取结果的个位数



4、当第11位数字、第10位数字、第9位数字都等于9时,看第8位数字的规律

    当第8位数字=0,3,6时,第二张运单的最后一位数字=上一张运单最后一位数字+0,取结果的个位数

    当第8位数字=1,2,4,5,7,8时,第二张运单的最后一位数字=上一张运单最后一位数字+9,取结果的个位数



5、当第11位数字、第10位数字、第9位数字、第8位数字都等于9时,看第7位数字的规律

    当第7位数字=0时,第二张运单的最后一位数字=上一张运单最后一位数字+7,取结果的个位数

    当第7位数字=1,2,3,4,5,6,7,8时,第二张运单的最后一位数字=上一张运单最后一位数字+6,取结果的个位数



6、当第11位数字、第10位数字、第9位数字、第8位数字、第7位数字都等于9时,看第6位数字的规律

    当第6位数字=0,1,2,3,4,5,6,7,8时,第二张运单的最后一位数字=上一张运单最后一位数字+3,取结果的个位数



7、当第11位数字、第10位数字、第9位数字、第8位数字、第7位数字、第6位数字都等于9时,根据第5位数字判断

    当第5位数字=0,1,2,4,5,7,8时,第二张运单的最后一位数字=上一张运单最后一位数字+9,取结果的个位数

    当第5位数字=3,6时,第二张运单的最后一位数字=上一张运单最后一位数字+8,取结果的个位数



8、当第11位数字、第10位数字、第9位数字、第8位数字、第7位数字、第6位数字、第5位数字都等于9时,根据第4位数字判断

    当第4位数字=0,2,4,6,8时,,第二张运单的最后一位数字=上一张运单最后一位数字+5,取结果的个位数

    当第4位数字=1,3,5,7时,第二张运单的最后一位数字=上一张运单最后一位数字+4,取结果的个位数



9、推到这里后面顺丰的套打系统就不能使用了,显示 ,后面的数字就不能推导了。



我用上面的规则做了一个EXCEL版的顺丰面单自动填充。地址http://x.paidai.com/view/18419

用这个EXCEL版本验证了一千万张面单,没有发现错误。
复制代码

--------

复制代码
最近在跟踪ERP系统的开发,跟大家分享一下 EMS快递单号排列规则

1、快递面单的前8位数字是按照顺序排列的
2、最后一位数字看似杂乱无章,但其实是用一个公式计算出来的。
计算规则如下:
1、X=第一位数字*8+第二位数字*6+第三位数字*4+第四位数字*2+第五位数字*3+第六位数字*5+第七位数字*9+第八位数字*7
2、计算X/11得出的余数=Y
3、计算Z=11-Y
       当Z=10时,最后一位数字是0
       当Z=11时,最后一位数字是5
       当Z<10时,最后一位数字是Z
复制代码

------------------------------------------------

因为EMS单号的前两位和后两位经常变,所以上面的方法有些欠缺,我自己写的无敌函数

 

复制代码
//2.(EMS)--EMS
function TFastOutSid.CreateEmsOutSid(TopOutSid: string): string;
var
  {----我的博客资料:http://www.cnblogs.com/del88/archive/2012/06/02/2531987.html----}
  //--EMS单号: EK702111927CS--
  Num1ToNum2,Num12ToNum13: string;{前两位和后两位}
  Num3ToNum10: string;{中间的3-10位}
  Num11: Integer;{第11位}
  Num3,Num4,Num5,Num6,Num7,Num8,Num9,Num10: Integer;
begin
  //取出前两位
  Num1ToNum2 := Copy(TopOutSid,1,2);
  //取出后两位
  Num12ToNum13 := Copy(TopOutSid,12,2);
  //取出中间的3-10位加1
  Num3ToNum10 := IntToStr(StrToInt(Copy(TopOutSid,3,8))+1);
  //分别取出加1过的3-10位
  num3:=StrToInt(Copy(Num3ToNum10,1,1));
  num4:=StrToInt(Copy(Num3ToNum10,2,1));
  num5:=StrToInt(Copy(Num3ToNum10,3,1));
  num6:=StrToInt(Copy(Num3ToNum10,4,1));
  num7:=StrToInt(Copy(Num3ToNum10,5,1));
  num8:=StrToInt(Copy(Num3ToNum10,6,1));
  num9:=StrToInt(Copy(Num3ToNum10,7,1));
  num10:=StrToInt(Copy(Num3ToNum10,8,1));
  //计算第11位
  Num11 := 11-((8*num3 + 6*num4 + 4*num5 + 2*num6 + 3*num7 + 5*num8 + 9*num9 + 7*num10) mod 11);
  if Num11 < 10 then
  begin
    Exit(Num1ToNum2 + Num3ToNum10 + IntToStr(Num11) + Num12ToNum13);
  end else if Num11 = 10 then begin
    Exit(Num1ToNum2 + Num3ToNum10 + IntToStr(0) + Num12ToNum13);
  end else if Num11 = 11 then begin
    Exit(Num1ToNum2 + Num3ToNum10 + IntToStr(5) + Num12ToNum13);
  end;
end;
复制代码

 

 2012.10.17补充==============代码备份,我自己用的顺风和EMS函数

复制代码
//3.(SF)--顺丰速运
function TFastOutSidApi.CreateSfOutSid(top_out_sid: string): string;
var
  //顺丰单号--755000000134
  fri,Nfri,Yuandanhao:string;
  num1,num2,num3,num4,num5,num6,num7,num8,num9,num10,num11,num12:Integer;
  Nnum1,Nnum2,Nnum3,Nnum4,Nnum5,Nnum6,Nnum7,Nnum8,Nnum9,Nnum10,Nnum11,Nnum12:Integer;
begin
  fri := Copy(top_out_sid,1,11);
  Yuandanhao := top_out_sid;

  Nfri := FloatToStr(StrToFloat(fri)+1);
  num1 := StrToInt(Copy(Yuandanhao,1,1));
  num2 := StrToInt(Copy(Yuandanhao,2,1));
  num3 := StrToInt(Copy(Yuandanhao,3,1));
  num4 := StrToInt(Copy(Yuandanhao,4,1));
  num5 := StrToInt(Copy(Yuandanhao,5,1));
  num6 := StrToInt(Copy(Yuandanhao,6,1));
  num7 := StrToInt(Copy(Yuandanhao,7,1));
  num8 := StrToInt(Copy(Yuandanhao,8,1));
  num9 := StrToInt(Copy(Yuandanhao,9,1));
  num10 := StrToInt(Copy(Yuandanhao,10,1));
  num11 := StrToInt(Copy(Yuandanhao,11,1));
  num12 := StrToInt(Copy(Yuandanhao,12,1));

  Nnum1 := StrToInt(Copy(Nfri,1,1));
  Nnum2 := StrToInt(Copy(Nfri,2,1));
  Nnum3 := StrToInt(Copy(Nfri,3,1));
  Nnum4 := StrToInt(Copy(Nfri,4,1));
  Nnum5 := StrToInt(Copy(Nfri,5,1));
  Nnum6 := StrToInt(Copy(Nfri,6,1));
  Nnum7 := StrToInt(Copy(Nfri,7,1));
  Nnum8 := StrToInt(Copy(Nfri,8,1));
  Nnum9 := StrToInt(Copy(Nfri,9,1));
  Nnum10 := StrToInt(Copy(Nfri,10,1));
  Nnum11 := StrToInt(Copy(Nfri,11,1));
  if (Nnum9-num9=1) and ((num9)mod(2)=1) then
  begin
    if num12-8 >=0 then
    begin
      Nnum12:=num12-8;             // -8
    end else begin
      Nnum12:= num12-8 +10;
    end;
  end else if (Nnum9-num9=1) and ((num9)mod(2)=0) then begin
    if num12-7 >=0 then
    begin
      Nnum12:=num12-7;             // -7
    end else begin
      Nnum12:= num12-7 +10;
    end;
  end else begin
    if ((num10=3) or (num10=6)) and (num11=9) then
    begin
      if num12-5 >=0 then
      begin
        Nnum12:=num12-5;             // -5
      end else begin
        Nnum12:= num12-5 +10;
      end;
    end else if (num11=9) then begin
      if num12-4 >=0 then
      begin
        Nnum12:=num12-4;             // -4
      end else begin
        Nnum12:= num12-4 +10;
      end;
    end else begin
      if num12-1 >=0 then
      begin
        Nnum12:=num12-1;            // -1
      end else begin
        Nnum12:= num12-1 +10;
      end;
    end;
  end;
  //返回数据
  Exit(Nfri + IntToStr(Nnum12));
end;
复制代码

 2012.10.17---上方的最终精简后(多余的numX,NnumX去掉了):

复制代码
//3.(SF)--顺丰速运
function TFastOutSidApi.CreateSfOutSid(top_out_sid: string): string;
var
  //顺丰单号--755000000134
  fri,Nfri,Yuandanhao:string;
  num9,num10,num11,num12:Integer;
  Nnum9,Nnum12:Integer;
begin
  fri := Copy(top_out_sid,1,11);
  Yuandanhao := top_out_sid;

  Nfri := FloatToStr(StrToFloat(fri)+1);
  num9 := StrToInt(Copy(Yuandanhao,9,1));
  num10 := StrToInt(Copy(Yuandanhao,10,1));
  num11 := StrToInt(Copy(Yuandanhao,11,1));
  num12 := StrToInt(Copy(Yuandanhao,12,1));

  Nnum9 := StrToInt(Copy(Nfri,9,1));
  if (Nnum9-num9=1) and ((num9)mod(2)=1) then
  begin
    if num12-8 >=0 then
    begin
      Nnum12:=num12-8;             // -8
    end else begin
      Nnum12:= num12-8 +10;
    end;
  end else if (Nnum9-num9=1) and ((num9)mod(2)=0) then begin
    if num12-7 >=0 then
    begin
      Nnum12:=num12-7;             // -7
    end else begin
      Nnum12:= num12-7 +10;
    end;
  end else begin
    if ((num10=3) or (num10=6)) and (num11=9) then
    begin
      if num12-5 >=0 then
      begin
        Nnum12:=num12-5;             // -5
      end else begin
        Nnum12:= num12-5 +10;
      end;
    end else if (num11=9) then begin
      if num12-4 >=0 then
      begin
        Nnum12:=num12-4;             // -4
      end else begin
        Nnum12:= num12-4 +10;
      end;
    end else begin
      if num12-1 >=0 then
      begin
        Nnum12:=num12-1;            // -1
      end else begin
        Nnum12:= num12-1 +10;
      end;
    end;
  end;
  //返回数据
  Exit(Nfri + IntToStr(Nnum12));
end;
复制代码

 

 

posted on   del88  阅读(85)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示