Browse Source

add tengxun caretype test

stanley-king 3 years ago
parent
commit
b56b2d0af0
3 changed files with 78 additions and 78 deletions
  1. 56 71
      helper/mtopcard/card_query.php
  2. 15 7
      helper/mtopcard/mtopcard.php
  3. 7 0
      test/TestCardNo.php

+ 56 - 71
helper/mtopcard/card_query.php

@@ -6,7 +6,18 @@ use Log;
 
 
 class card_query
 class card_query
 {
 {
-    //[$validate,$card_type,$region_no,$isTransfer,$status]
+    private function validate_checker($status)
+    {
+        // "status": 1 //状态 0:空号;1:实号;2:停机;3:库无;4:沉默号;5:风险号 6: 未知 7: 流量卡
+        Log::record("status={$status}",Log::DEBUG);
+        if (in_array($status, [0, 5, 7])) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    //[success,$card_type,$region_no,$isTransfer,$status]
     private function tencent_query($card_no)
     private function tencent_query($card_no)
     {
     {
         $type_checker = function ($channel)
         $type_checker = function ($channel)
@@ -43,17 +54,6 @@ class card_query
             }
             }
         };
         };
 
 
-        $validate_checker = function ($code)
-        {
-            // "status": 1 //状态 0:空号;1:实号;2:停机;3:库无;4:沉默号;5:风险号 6: 未知 7: 流量卡
-            Log::record("status={$code}",Log::DEBUG);
-            if (in_array($code, [0,5,7])) {
-                return false;
-            } else {
-                return true;
-            }
-        };
-
         $regin_checker = function ($province)
         $regin_checker = function ($province)
         {
         {
             if(empty($province)) return -1;
             if(empty($province)) return -1;
@@ -75,7 +75,7 @@ class card_query
             }
             }
         };
         };
 
 
-        $api_function = function ($card_no, &$card_type, &$validate, &$region_no, &$status) use ($type_checker, $validate_checker, $regin_checker, $status_converter)
+        $query_fun = function ($card_no, &$card_type, &$region_no, &$status) use ($type_checker, $regin_checker, $status_converter)
         {
         {
             $secretId = 'AKIDkd6sT6C4765LtYN1W2fN2WC2Ynr42acemjQW';
             $secretId = 'AKIDkd6sT6C4765LtYN1W2fN2WC2Ynr42acemjQW';
             $secretKey = 'dupQeU838dhuQ8uDP2bi81nQNb5wt9KW1qLP7eWu';
             $secretKey = 'dupQeU838dhuQ8uDP2bi81nQNb5wt9KW1qLP7eWu';
@@ -109,7 +109,6 @@ class card_query
 
 
                 $status = $status_converter($code);
                 $status = $status_converter($code);
                 $card_type = $type_checker($extend['isp']);
                 $card_type = $type_checker($extend['isp']);
-                $validate = $validate_checker($code);
                 $region_no = $regin_checker($extend['prov']);
                 $region_no = $regin_checker($extend['prov']);
                 return true;
                 return true;
             } else {
             } else {
@@ -118,21 +117,23 @@ class card_query
             }
             }
         };
         };
 
 
-        $validate = true;
-        $card_type = card_type($card_no,$region_no);
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        $org_type = card_type($card_no,$region_no);
         $region_no = -1;
         $region_no = -1;
         $status = 6;
         $status = 6;
 
 
-        //[$validate,$card_type,$region_no,$isTransfer,$status]
-        $ret = $api_function($card_no, $card_type, $validate, $region_no, $status);
-        if($ret)
-        {
-            return [$validate,$card_type,$region_no,$status];
+        //[succ,$card_type,$region_no,$isTransfer,$status]
+        $ret = $query_fun($card_no, $card_type, $region_no, $status);
+        if ($ret) {
+            $isTransfer = $org_type != $card_type;
+            return [true, $card_type, $region_no, $isTransfer, $status];
+        }
+        else {
+            return [false, $card_type, -1, false, $status];
         }
         }
-        return [$validate,$card_type,-1,$status];
     }
     }
 
 
-    //[$validate,$card_type,$region_no,$isTransfer,$status]
+    //[succ,$card_type,$region_no,$isTransfer,$status]
     public function tianyan_query($card_no)
     public function tianyan_query($card_no)
     {
     {
         $type_checker = function ($channel)
         $type_checker = function ($channel)
@@ -151,17 +152,6 @@ class card_query
             }
             }
         };
         };
 
 
-        $validate_checker = function ($status)
-        {
-            // "status": 1 //状态 0:空号;1:实号;2:停机;3:库无;4:沉默号;5:风险号
-            Log::record("status={$status}",Log::DEBUG);
-            if (in_array($status, [0,5])) {
-                return false;
-            } else {
-                return true;
-            }
-        };
-
         $regin_checker = function ($area)
         $regin_checker = function ($area)
         {
         {
             if(empty($area)) return -1;
             if(empty($area)) return -1;
@@ -188,7 +178,7 @@ class card_query
             return -1;
             return -1;
         };
         };
 
 
-        $ali = function ($card_no, &$validate, &$region_no,&$status) use ($validate_checker, $regin_checker): bool
+        $ali = function ($card_no, &$region_no, &$status) use ($regin_checker): bool
         {
         {
             $url = 'https://mobileempty.shumaidata.com/mobileempty';
             $url = 'https://mobileempty.shumaidata.com/mobileempty';
             $params['mobile'] = $card_no;
             $params['mobile'] = $card_no;
@@ -205,7 +195,6 @@ class card_query
             {
             {
                 $data = $resp['data'];
                 $data = $resp['data'];
                 $status = intval($data['status']);
                 $status = intval($data['status']);
-                $validate = $validate_checker(intval($data['status']));
                 $region_no = $regin_checker($data['area']);
                 $region_no = $regin_checker($data['area']);
                 return true;
                 return true;
             } else {
             } else {
@@ -214,7 +203,7 @@ class card_query
             }
             }
         };
         };
 
 
-        $tianyan = function ($card_no, &$validate, &$region_no,&$status) use ($validate_checker, $regin_checker): bool
+        $tianyan = function ($card_no, &$region_no, &$status) use ($regin_checker): bool
         {
         {
             $url = 'https://api.shumaidata.com/v4/mobile_empty/check';
             $url = 'https://api.shumaidata.com/v4/mobile_empty/check';
             $appid = '2Xfa6IFIPv0sVUjy';
             $appid = '2Xfa6IFIPv0sVUjy';
@@ -238,7 +227,6 @@ class card_query
             {
             {
                 $data = $resp['data'];
                 $data = $resp['data'];
                 $status = intval($data['status']);
                 $status = intval($data['status']);
-                $validate = $validate_checker(intval($data['status']));
                 $region_no = $regin_checker($data['area']);
                 $region_no = $regin_checker($data['area']);
                 return true;
                 return true;
             } else {
             } else {
@@ -285,6 +273,7 @@ class card_query
             }
             }
         };
         };
 
 
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         [$succ,$_card_type,$_org_type,$_isTransfer] = $tianyan_cardtyper($card_no);
         [$succ,$_card_type,$_org_type,$_isTransfer] = $tianyan_cardtyper($card_no);
         if($succ) {
         if($succ) {
             $card_type = $_card_type;
             $card_type = $_card_type;
@@ -296,36 +285,23 @@ class card_query
         }
         }
 
 
         $status = 6;
         $status = 6;
-        $ret = $tianyan($card_no,$validate,$region_no,$status);
-        if($ret)
-        {
-            return [$validate,$card_type,$region_no,$isTransfer,$status];
+        $ret = $tianyan($card_no, $region_no, $status);
+        if ($ret) {
+            return [true, $card_type, $region_no, $isTransfer, $status];
         }
         }
 
 
-        $ret = $ali($card_no,$validate,$region_no,$status);
-        if($ret)
-        {
-            return [$validate,$card_type,$region_no,$isTransfer,$status];
+        $ret = $ali($card_no, $region_no, $status);
+        if ($ret) {
+            return [true, $card_type, $region_no, $isTransfer, $status];
         }
         }
 
 
-        return [true,$card_type,-1,false,$status];
+        return [false, $card_type, -1, false, $status];
     }
     }
 
 
 
 
     //[$validate,$card_type,$region_no,$isTransfer,$status,$black]
     //[$validate,$card_type,$region_no,$isTransfer,$status,$black]
     public function validate($card_no)
     public function validate($card_no)
     {
     {
-        $validate_checker = function ($status)
-        {
-            // "status": 1 //状态 0:空号;1:实号;2:停机;3:库无;4:沉默号;5:风险号
-            Log::record("status={$status}",Log::DEBUG);
-            if (in_array($status, [0,5])) {
-                return false;
-            } else {
-                return true;
-            }
-        };
-
         $time_checker = function ($update_time)
         $time_checker = function ($update_time)
         {
         {
             //90 天以内数据有效
             //90 天以内数据有效
@@ -333,7 +309,7 @@ class card_query
             return $delta < 360 * 86400 && $delta >= 0;
             return $delta < 360 * 86400 && $delta >= 0;
         };
         };
 
 
-        $pinfo_getter = function ($card_no) use ($validate_checker,$time_checker)
+        $pinfo_getter = function ($card_no) use ($time_checker)
         {
         {
             $mod_card = Model('card_info');
             $mod_card = Model('card_info');
             $info = $mod_card->getCardInfo($card_no);
             $info = $mod_card->getCardInfo($card_no);
@@ -346,11 +322,10 @@ class card_query
 
 
                 $card_type = intval($info['card_type']);
                 $card_type = intval($info['card_type']);
                 $region_no = intval($info['regin']);
                 $region_no = intval($info['regin']);
-                $isTransfer = intval($info['transfer']) == 0 ? false : true;
+                $isTransfer = !(intval($info['transfer']) == 0);
                 $status = intval($info['card_state']);
                 $status = intval($info['card_state']);
                 $black = intval($info['black']);
                 $black = intval($info['black']);
-                $validate = $validate_checker($status);
-
+                $validate = $this->validate_checker($status);
                 $result = [$validate,$card_type,$region_no,$isTransfer,$status,$black];
                 $result = [$validate,$card_type,$region_no,$isTransfer,$status,$black];
                 return [true,$result];
                 return [true,$result];
             }
             }
@@ -369,22 +344,32 @@ class card_query
         $validate = true;
         $validate = true;
         $black = 0;
         $black = 0;
 
 
-        $card_type = card_type($card_no,$region_no);
+        $org_type = card_type($card_no,$region_no);
         $region_no = -1;
         $region_no = -1;
 
 
-        if($card_type == PetroChinaCard || $card_type == SinopecCard) {
-            return [$validate,$card_type,$region_no,false,1,$black];
+        if($org_type === UnknownCard) {
+            return [false, $org_type, $region_no, false, 1, $black];
         }
         }
 
 
-//        [$succ,$result] = $pinfo_getter($card_no);
-//        if($succ) return $result;
-
-        $this->tencent_query($card_no);
-
+        if($org_type == PetroChinaCard || $org_type == SinopecCard) {
+            return [$validate, $org_type, $region_no, false, 1, $black];
+        }
 
 
+        [$succ,$result] = $pinfo_getter($card_no);
+        if($succ) return $result;
 
 
+        [$succ,$card_type,$region_no,$isTransfer,$status] = $this->tencent_query($card_no);
+        if($succ === false)
+        {
+            [$succ,$card_type,$region_no,$isTransfer,$status] = $this->tianyan_query($card_no);
+            if($succ === false) {
+                return [];
+            }
+        }
 
 
-//    if($succ) $pinfo_updator($card_no,$card_type,$org_type,$region_no,$isTransfer,$status);
+        $validate = $this->validate_checker($status);
+        $pinfo_updator($card_no,$card_type,$org_type,$region_no,$isTransfer,$status);
 
 
+        return [$validate,$card_type,$region_no,$isTransfer,$status,$black];
     }
     }
 }
 }

+ 15 - 7
helper/mtopcard/mtopcard.php

@@ -224,11 +224,13 @@ function simple_card_type($cardno)
         return SinopecCard;
         return SinopecCard;
     } elseif (preg_match('/^9[0-9]{15}$/', $cardno, $matches)) {
     } elseif (preg_match('/^9[0-9]{15}$/', $cardno, $matches)) {
         return PetroChinaCard;
         return PetroChinaCard;
-    } elseif (preg_match('/^134[0-8]\d{7}$|^(?:13[5-9]|147|15[0-27-9]|17[28]|18[2-478]|19[578])\d{8}$/', $cardno, $matches)) {
+    } elseif (preg_match('/^134[0-8]\d{7}$|^(?:13[5-9]|15[012789]|17[28]|18[23478]|19[578])\d{8}$/', $cardno, $matches)) {
         return ChinaMobileCard;
         return ChinaMobileCard;
-    } elseif (preg_match('/^(?:13[0-2]|145|15[56]|166|17[156]|18[56]|196)\d{8}$/', $cardno, $matches)) {
+    } elseif (preg_match('/^(?:13[0-2]|15[56]|166|17[156]|18[56]|196)\d{8}$/', $cardno, $matches)) {
         return ChinaUnicomCard;
         return ChinaUnicomCard;
-    } elseif (preg_match('/^(?:133|149|153|177|173|18[019]|19[0139])\d{8}$/', $cardno, $matches)) {
+    } elseif (preg_match('/^(?:133|153|177|173|18[019]|19[0139])\d{8}$/', $cardno, $matches)) {
+        return ChinaTelecomCard;
+    } elseif (preg_match('/^(1349)\d{7}$/', $cardno, $matches)) {
         return ChinaTelecomCard;
         return ChinaTelecomCard;
     } elseif (preg_match('/^1\d{10}$/', $cardno, $matches)) {
     } elseif (preg_match('/^1\d{10}$/', $cardno, $matches)) {
         return PhoneCard;
         return PhoneCard;
@@ -249,13 +251,19 @@ function card_type($cardno,&$regin_no)
     elseif(preg_match('/^1\d{10}$/',$cardno,$matches))
     elseif(preg_match('/^1\d{10}$/',$cardno,$matches))
     {
     {
         $regin_no = -1;
         $regin_no = -1;
-        if (preg_match('/^134[0-8]\d{7}$|^(?:13[5-9]|147|15[0-27-9]|17[28]|18[2-478]|19[578])\d{8}$/', $cardno, $matches)) {
+        if (preg_match('/^134[0-8]\d{7}$|^(?:13[5-9]|15[012789]|17[28]|18[23478]|19[578])\d{8}$/', $cardno, $matches)) {
             return ChinaMobileCard;
             return ChinaMobileCard;
-        } elseif (preg_match('/^(?:13[0-2]|145|15[56]|166|17[156]|18[56]|196)\d{8}$/', $cardno, $matches)) {
+        }
+        elseif (preg_match('/^(?:13[0-2]|15[56]|166|17[156]|18[56]|196)\d{8}$/', $cardno, $matches)) {
             return ChinaUnicomCard;
             return ChinaUnicomCard;
-        } elseif (preg_match('/^(?:133|149|153|177|173|18[019]|19[0139])\d{8}$/', $cardno, $matches)) {
+        }
+        elseif (preg_match('/^(?:133|153|177|173|18[019]|19[0139])\d{8}$/', $cardno, $matches)) {
             return ChinaTelecomCard;
             return ChinaTelecomCard;
-        } else {
+        }
+        elseif (preg_match('/^(1349)\d{7}$/', $cardno, $matches)) {
+            return ChinaTelecomCard;
+        }
+        else {
             return UnknownCard;
             return UnknownCard;
         }
         }
     }
     }

+ 7 - 0
test/TestCardNo.php

@@ -71,4 +71,11 @@ class TestCardNo extends TestCase
         [$validate, $card_type, $regin_no, $isTransfer, $card_state, $black] = mtopcard\valid_phone($card_no);
         [$validate, $card_type, $regin_no, $isTransfer, $card_state, $black] = mtopcard\valid_phone($card_no);
 
 
     }
     }
+
+    public function testCardType()
+    {
+        $card_no = 13491810024;
+        $card_type = mtopcard\card_type($card_no,$region);
+
+    }
 }
 }