UPS跟踪号校验代码

每个快递公司生成的单号大部分带自校验功能。下面的代码实现对UPS单号的正确性校验

function validUPS($tr){
    $tr = strtoupper(trim($tr));
    if (strlen($tr) == 11)
    {
        $checknumber = 100 - (substr($tr,1, 1) + substr($tr,3, 1) + substr($tr,5, 1) + substr($tr,7, 1) + substr($tr,9, 1) + 2 * (substr($tr,2, 1) + substr($tr,4, 1) + substr($tr,6, 1) + substr($tr,8, 1)));
        if ($checknumber < 0)
        {
            $checknumber = 100 + $checknumber;
        }
        if ($checknumber >= 10)
        {
            $checknumber = substr($checknumber,1,1);
        }
        else if ($checknumber <= 10)
        {
            $checknumber = substr($checknumber,0,1);
        }
        $r= substr($tr,10, 1) == $checknumber;
    }else if (strlen($tr)=='18'){
        $tr = substr($tr,2, 16);
        for ($i = 65; $i <= 90; $i++)
        {
            if ($i >= 65 && $i <= 72)
            {
                $tr=str_replace(chr($i),chr($i-15),$tr);
            }
            else if ($i >= 73 && $i <= 82)
            {
                $tr=str_replace(chr($i),chr($i-25),$tr);
            }
            else if ($i >= 83 && $i <= 90)
            {
                $tr=str_replace(chr($i),chr($i-35),$tr);
            }
        }
        $checknumber = 100 - (substr($tr,0, 1) + substr($tr,2, 1) + substr($tr,4, 1) + substr($tr,6, 1) + substr($tr,8, 1) + substr($tr,10, 1) + substr($tr,12, 1) + substr($tr,14, 1) + 2 * (substr($tr,1, 1) + substr($tr,3, 1) + substr($tr,5, 1) + substr($tr,7, 1) + substr($tr,9, 1) + substr($tr,11, 1) + substr($tr,13, 1)));
        if ($checknumber < 0)
        {
            $checknumber = 100 + $checknumber;
        }
        if ($checknumber < 10)
        {
            $checknumber = substr($checknumber,0,1);
        }
        else if ($checknumber >= 10)
        {
            $checknumber = substr($checknumber,1,1);
        }
        $r= $checknumber == substr($tr,15, 1);
    }else {
        $r=false;
    }
    return $r;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值