聚美智数


运营商三要素验证

<h3>接口描述</h3> <ul> <li>验证姓名、身份证号、手机号是否一致,返回验证结果</li> </ul> <h3>请求地址</h3> <p><code>https://api.jumdata.com/mobile-three/check</code></p> <h3>请求方式</h3> <ul> <li>GET/POST</li> </ul> <h3>请求格式</h3> <ul> <li>x-www-form-urlencoded</li> </ul> <h3>请求参数</h3> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>必须</th> <th>&lt;div style=&quot;width:420px&quot;&gt;说明&lt;/div&gt;</th> </tr> </thead> <tbody> <tr> <td>appId</td> <td>String</td> <td>是</td> <td>服务商分配的唯一标识</td> </tr> <tr> <td>timestamp</td> <td>Long</td> <td>是</td> <td>当前时间的毫秒数</td> </tr> <tr> <td>sign</td> <td>String</td> <td>是</td> <td>签名,见签名算法说明</td> </tr> <tr> <td>name</td> <td>String</td> <td>是</td> <td>姓名</td> </tr> <tr> <td>idcard</td> <td>String</td> <td>是</td> <td>身份证号</td> </tr> <tr> <td>mobile</td> <td>String</td> <td>是</td> <td>手机号</td> </tr> <tr> <td>isp</td> <td>String</td> <td>否</td> <td>运营商: cmcc-移动,cucc-联通,ctcc-电信,cncc-广电&lt;br/&gt;为空则自动识别运营商,支持携号转网&lt;br/&gt;传入表示指定运营商,如果传入的isp和实际运营商不符,则返回无记录,支持携号转入</td> </tr> </tbody> </table> <h3>签名算法</h3> <pre><code>sign = sha256(appId + appSecret + timestamp)</code></pre> <p>用服务商分配的 <strong>appId</strong>、服务商分配的 <strong>appSecret</strong>,当前时间毫秒数 <strong>timestamp</strong>,按上述顺序拼接成字符串,再进行 <strong>sha256</strong> 哈希得到。如下:</p> <pre><code class="language-java">String appId = &amp;quot;xyzxy2121zxyz&amp;quot;; String timestamp = &amp;quot;1555378976238&amp;quot;; String appSecret = &amp;quot;efcefcef1121cefcefc1212121&amp;quot;; String str = appId + appSecret + timestamp; String sign = sha256(str);</code></pre> <h3>正确返回</h3> <pre><code>{ &amp;quot;code&amp;quot;: 200, &amp;quot;msg&amp;quot;: &amp;quot;成功&amp;quot;, &amp;quot;taskNo&amp;quot;: &amp;quot;69564903663951243279&amp;quot;, &amp;quot;charge&amp;quot;: true, &amp;quot;data&amp;quot;: { &amp;quot;result&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;desc&amp;quot;: &amp;quot;一致&amp;quot;, &amp;quot;isp&amp;quot;: &amp;quot;cmcc&amp;quot;, &amp;quot;sex&amp;quot;: &amp;quot;男&amp;quot;, &amp;quot;birthday&amp;quot;: &amp;quot;19850106&amp;quot;, &amp;quot;address&amp;quot;: &amp;quot;浙江省杭州市&amp;quot; } }</code></pre> <h3>错误返回</h3> <pre><code>{ &amp;quot;code&amp;quot;: 400, &amp;quot;msg&amp;quot;: &amp;quot;手机号格式不正确&amp;quot;, &amp;quot;charge&amp;quot;: false, }</code></pre> <h3>返回字段说明</h3> <table> <thead> <tr> <th>字段名</th> <th>&lt;div style=&quot;width:420px&quot;&gt;说明&lt;/div&gt;</th> </tr> </thead> <tbody> <tr> <td>code</td> <td>返回码,详见返回码说明</td> </tr> <tr> <td>charge</td> <td>计费标志</td> </tr> <tr> <td>msg</td> <td>code对应的描述</td> </tr> <tr> <td>taskNo</td> <td>本次请求号</td> </tr> <tr> <td>data</td> <td>返回具体结果,object类型,详见data返回字段描述</td> </tr> </tbody> </table> <h4>data返回字段说明</h4> <table> <thead> <tr> <th>字段名</th> <th>&lt;div style=&quot;width:420px&quot;&gt;说明&lt;/div&gt;</th> </tr> </thead> <tbody> <tr> <td>result</td> <td>验证结果 &lt;br/&gt;0:一致(计费)&lt;br/&gt;1:不一致(计费)&lt;br/&gt;2: 无记录(不计费)</td> </tr> <tr> <td>desc</td> <td>结果描述</td> </tr> <tr> <td>isp</td> <td>运营商 &lt;br/&gt; cmcc:移动&lt;br/&gt;cucc:联通&lt;br/&gt;ctcc:电信&lt;br/&gt;cncc:广电</td> </tr> <tr> <td>sex</td> <td>性别</td> </tr> <tr> <td>birthday</td> <td>生日</td> </tr> <tr> <td>address</td> <td>籍贯</td> </tr> </tbody> </table> <h4>code返回码说明</h4> <table> <thead> <tr> <th>code</th> <th>&lt;div style=&quot;width:420px&quot;&gt;说明&lt;/div&gt;</th> </tr> </thead> <tbody> <tr> <td>200</td> <td>成功</td> </tr> <tr> <td>400</td> <td>参数错误</td> </tr> <tr> <td>401</td> <td>不支持的号段</td> </tr> <tr> <td>404</td> <td>接口地址不正确</td> </tr> <tr> <td>500</td> <td>系统维护,请稍候再试</td> </tr> <tr> <td>501</td> <td>官方数据源维护,请稍候再试</td> </tr> <tr> <td>601</td> <td>接口未开通</td> </tr> <tr> <td>602</td> <td>账号停用</td> </tr> <tr> <td>603</td> <td>余额不足请充值</td> </tr> <tr> <td>604</td> <td>接口停用</td> </tr> <tr> <td>606</td> <td>调用超限,请稍候再试</td> </tr> <tr> <td>607</td> <td>ip不在白名单</td> </tr> <tr> <td>609</td> <td>请求过于频繁,请稍候再试</td> </tr> <tr> <td>610</td> <td>请求超时</td> </tr> <tr> <td>999</td> <td>其他,以实际返回为准</td> </tr> </tbody> </table> <h3>示例</h3> <h4>java</h4> <pre><code class="language-java">import com.anq.core.utils.HttpUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.junit.Test; import java.util.HashMap; import java.util.Map; @Slf4j public class IdcardValidateDemo { String appId = &amp;quot;服务商分配的appId&amp;quot;; String appSecret = &amp;quot;服务商分配的appSecret&amp;quot;; String url = &amp;quot;https://api.jumdata.com/mobile_three/check&amp;quot;; @Test public void idcardValidate() { String timestamp = System.currentTimeMillis() + &amp;quot;&amp;quot;; String sign = DigestUtils.sha256Hex(appId + appSecret + timestamp); // 生成sign Map&amp;lt;String, Object&amp;gt; params = new HashMap&amp;lt;String, Object&amp;gt;(); params.put(&amp;quot;appId&amp;quot;, appId); // 服务商分配的appId params.put(&amp;quot;timestamp&amp;quot;, timestamp); params.put(&amp;quot;sign&amp;quot;, sign); params.put(&amp;quot;name&amp;quot;, &amp;quot;&amp;quot;); params.put(&amp;quot;mobile&amp;quot;, &amp;quot;&amp;quot;); params.put(&amp;quot;idcard&amp;quot;, &amp;quot;&amp;quot;); //HttpUtil可从这里下载 https://file.jumdata.com/support/HttpUtil.java String result = HttpUtil.get(url, null, params); log.info(result); } }</code></pre> <h4>php</h4> <pre><code class="language-php">&amp;lt;?php $appId = &amp;quot;服务商分配的appId&amp;quot;; $appSecret= &amp;quot;服务商分配的appSecret&amp;quot;; $url = &amp;quot;https://api.jumdata.com/mobile_three/check&amp;quot;; $method = &amp;quot;POST&amp;quot;; $headers = array(); //根据API的要求,定义相对应的Content-Type array_push($headers, &amp;quot;Content-Type&amp;quot; . &amp;quot;:&amp;quot; . &amp;quot;application/x-www-form-urlencoded; charset=UTF-8&amp;quot;); $timestamp = getUnixTimestamp(); var_dump($timestamp); $sign = hash(&amp;#039;sha256&amp;#039;,$appId . $appSecret . $timestamp); // 生成sign var_dump($sign); $idcard = &amp;quot;&amp;quot;; $name = &amp;quot;&amp;quot;; $mobile = &amp;quot;&amp;quot;; $bodys = &amp;quot;appId=&amp;quot;. $appId . &amp;quot;&amp;amp;sign=&amp;quot; . $sign . &amp;quot;&amp;amp;timestamp=&amp;quot;. $timestamp. &amp;quot;&amp;amp;mobile=&amp;quot; . mobile . &amp;quot;&amp;amp;name=&amp;quot; . $name . &amp;quot;&amp;amp;idcard=&amp;quot; . $idcard; $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys); var_dump(curl_exec($curl)); function getUnixTimestamp () { list($s1, $s2) = explode(&amp;#039; &amp;#039;, microtime()); return sprintf(&amp;#039;%.0f&amp;#039;,(floatval($s1) + floatval($s2)) * 1000); } </code></pre> <h4>python</h4> <pre><code class="language-python">import requests import time import hashlib appId = &amp;quot;服务商分配&amp;quot; appSecret = &amp;quot;服务商分配&amp;quot; url = &amp;quot;https://api.jumdata.com/mobile_three/check&amp;quot; method = &amp;#039;POST&amp;#039; time = time.time() timestamp = str(round(time * 1000)) print (timestamp) tmp = appId + appSecret + timestamp sign = hashlib.sha256(tmp.encode(&amp;quot;utf8&amp;quot;)).hexdigest() bodys = {} bodys[&amp;#039;appId&amp;#039;] = appId bodys[&amp;#039;timestamp&amp;#039;] = timestamp bodys[&amp;#039;sign&amp;#039;] = sign bodys[&amp;#039;mobile&amp;#039;] = &amp;quot;&amp;quot; bodys[&amp;#039;name&amp;#039;] = &amp;quot;&amp;quot; bodys[&amp;#039;idcard&amp;#039;] = &amp;quot;&amp;quot; headers = { &amp;#039;Content-Type&amp;#039;: &amp;#039;application/x-www-form-urlencoded; charset=UTF-8&amp;#039; } response = requests.post(url, data = bodys, headers = headers) print (response.text) </code></pre> <h4>C Sharp</h4> <p>``` c# using System; using System.IO; using System.Net; using System.Net.Security; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text;</p> <p>public class IdcardValidate { private const String url = &quot;<a href="https://api.jumdata.com/mobile_three/check">https://api.jumdata.com/mobile_three/check</a>; private const String method = &quot;POST&quot;; private const String appId = &quot;服务商分配&quot;; private const String appSecret = &quot;服务商分配&quot;;</p> <pre><code>public static void Main(string[] args) { TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); String timestamp = Convert.ToInt64(ts.TotalMilliseconds).ToString(); String sign = SHA256(appId + appSecret + timestamp); String name = &amp;quot;&amp;quot;; String idcard = &amp;quot;&amp;quot;; String bodys = &amp;quot;appId=&amp;quot; + appId + &amp;quot;&amp;amp;sign=&amp;quot; + sign + &amp;quot;&amp;amp;timestamp=&amp;quot; + timestamp + &amp;quot;&amp;amp;mobile=&amp;quot; + mobile + &amp;quot;&amp;amp;name=&amp;quot; + name + &amp;quot;&amp;amp;idcard=&amp;quot; + idcard; HttpWebRequest httpRequest = null; HttpWebResponse httpResponse = null; httpRequest = (HttpWebRequest) WebRequest.CreateDefault(new Uri(url)); httpRequest.Method = method; httpRequest.ContentType = &amp;quot;application/x-www-form-urlencoded; charset=UTF-8&amp;quot;; byte[] data = Encoding.UTF8.GetBytes(bodys); using (Stream stream = httpRequest.GetRequestStream()) { stream.Write(data, 0, data.Length); } httpResponse = (HttpWebResponse) httpRequest.GetResponse(); Console.WriteLine(httpResponse.StatusCode); Stream st = httpResponse.GetResponseStream(); StreamReader reader = new StreamReader(st, Encoding.GetEncoding(&amp;quot;utf-8&amp;quot;)); Console.WriteLine(reader.ReadToEnd()); } public static string SHA256(string str) { byte[] SHA256Data = Encoding.UTF8.GetBytes(str); SHA256Managed Sha256 = new SHA256Managed(); byte[] by = Sha256.ComputeHash(SHA256Data); return BitConverter.ToString(by).Replace(&amp;quot;-&amp;quot;, &amp;quot;&amp;quot;).ToLower(); }</code></pre> <p>}</p> <pre><code></code></pre>

页面列表

ITEM_HTML