首页›API 云市场›身份证二要素核验

身份证二要素核验

接口编号 SFZ02 · 开放平台开发文档

身份证二要素核验
接口编号SFZ02分类API实用工具 / 身份证核验状态启用

1、接口说明

身份证二要素核验。传入【姓名 xm + 身份证号 sfz】两个要素,接口调用实名核验上游校验两者是否匹配,返回 match(true/false)及脱敏后的姓名、证件号、出生日期、性别、户籍地。相同 (xm+sfz) 的明确结论本地缓存 44 小时,缓存期内直接返回、不再请求上游,既省钱又提速。

2、接口信息

请求地址https://leikuang.muzhiyun.com/api/sfz2.do
请求方式POST
请求格式application/json; charset=utf-8
响应格式application/json; charset=utf-8
超时时间60 秒(建议)
计费方式按调用次数
计费单位:次;标准售价:0.02 元 / 次。每次调用成功后从账户余额扣除对应费用,余额不足时接口返回 ok=0 并提示充值。

3、鉴权说明

所有请求必须携带下列三个公共参数,缺一不可。它们既是请求参数,也参与签名。
参数名说明类型必填示例备注
appid应用IDString(32)是muzhiyun由服务商提供;亦支持系统名下权利人的用户编号,即本系统的登陆账户。如果传入,APPKEY应当是账户登陆密码的16位小写md5字符串
sendtime请求时间戳Int是1790784000Unix 时间戳(秒);与服务器时间相差过大视为过期请求
sign签名String(32)是FC265408A1BE19712C7AD03881975D5F签名值:参与签名的参数按变量名升序拼接后加密,不含本字段
签名算法
1) 取本次请求的全部参数(不含 sign 自身);
2) 按参数名 ASCII 升序排序,拼接成 k1=v1&k2=v2&…;
3) 末尾追加 &key=你的AppKey;
4) 对整串做 MD5 后转大写,即得 sign。
调用示例 · 按本接口真实示例值实算一遍
你的 AppKey(仅本地签名用,不随请求发送):YOUR_APP_KEY
1
参与签名的参数(已剔除 sign 自身,按参数名升序)
appid=muzhiyun&sendtime=1792521165&sfz=350623198311044136&xm=李建华
2
末尾追加 &key=你的AppKey
appid=muzhiyun&sendtime=1792521165&sfz=350623198311044136&xm=李建华&key=YOUR_APP_KEY
3
整串做 MD5 后转大写,得到 sign
726CF81654C3DEDAD54D48D38EBC618E
4
最终请求参数(JSON 包,作为请求 Body 发送)
{
    "appid": "muzhiyun",
    "sendtime": "1792521165",
    "sfz": "350623198311044136",
    "xm": "李建华",
    "sign": "726CF81654C3DEDAD54D48D38EBC618E"
}
上例 AppKey 写作 YOUR_APP_KEY,请换成你自己的 AppKey 重算 sign —— sign 与 AppKey 绑定,同样的参数换 AppKey 会得到完全不同的 sign。复制本例后,把 YOUR_APP_KEY 替换为你自己的 AppKey,再按 ①②③ 重算 sign 即可直接调用(sendtime 为当前时间戳,300 秒内有效)。排序只按参数名,不看参数值;布尔值按 1/0 参与拼接;数组型参数不参与签名。
时间戳要求:sendtime 为 10 位 Unix 秒级时间戳,与服务器时间相差超过 300 秒 视为过期请求。AppID / AppKey 由开放平台发放,可在「用户管理 → 开发者凭证」中查看。

4、请求参数

以下参数通过 Body(application/json) 传递
参数名说明类型必填示例备注
sfz身份证号码String(18)是350623198311044136证件持有人 18 位居民身份证号(15/17 位亦接受,会自动升位补全为 18 位);校验码须合法
xm真实姓名String(50)是李建华证件持有人真实姓名;中文(可含·)或英文,1~50 个字符

5、返回结果

接口统一返回 JSON,ok=1 表示成功、ok=0 表示失败;鉴权或配置类错误同时返回 HTTP 666。
字段类型说明
okInt1=成功,0=失败
msgString结果描述 / 失败原因
成功响应示例
{
    "ok": 1,
    "msg": "实名信息正确",
    "xm": "李建**",
    "sfz": "3506******36",
    "match": true,
    "birthday": "1983-11-04",
    "sex": "男",
    "address": "福建漳州市漳浦县"
}
失败响应示例
{
    "ok": 0,
    "msg": "实名校验失败:身份证与姓名不匹配"
}
余额不足 / 无可用套餐
{
    "ok": 0,
    "msg": "余额不足,且无可用套餐,请充值后重试。"
}
接口已停用
{
    "ok": 0,
    "msg": "接口【身份证二要素核验】已停用,暂停调用,请联系管理员。"
}
常见错误提示(msg 原文)
缺少必要的参数【appid、sendtime、sign】请详看开发文档。
AppID不存在,请联系产品经理进行业务开通。
sendtime不是10位的数字。
时间戳超时,请重新请求。
签名校验失败。
余额不足,请充值后重试。
接口【XXX】已停用,暂停调用,请联系管理员。

6、调用示例

下面示例自动计算签名(ksort 后 MD5 大写):复制后只需把 你的AppID / 你的AppKey 换成真实凭证即可运行。Python / PHP 为完整可运行版;cURL、JavaScript 展示请求形态。GET 接口请把参数(含 appid/sendtime/sign)拼到 URL 查询串。
cURL
curl -X POST "https://leikuang.muzhiyun.com/api/sfz2.do" \
  -H "Content-Type: application/json" \
  -d &#039;{"appid":"你的AppID", "sendtime":"<当前时间戳>", "sign":"<按签名算法计算>", "appid":"muzhiyun","sendtime":"1790784000","sfz":"350623198311044136","xm":"李建华" }'
PHP
<?php
$appId  = "你的AppID";      // 没有则填 muzhiyun
$appKey = "你的AppKey";
$url    = "https://leikuang.muzhiyun.com/api/sfz2.do";

$params = [
    &#039;appid' => 'muzhiyun',
    &#039;sendtime' => '1790784000',
    &#039;sfz' => '350623198311044136',
    &#039;xm' => '李建华',
];
// 以下三项由代码自动补,无需手填
$params["appid"]    = $appId;
$params["sendtime"] = (string)time();
ksort($params);
$src = &#039;';
foreach($params as $k=>$v) $src .= $k.&#039;='.$v.'&';
$src .= &#039;key='.$appKey;
$params["sign"] = strtoupper(md5($src));

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL            => $url,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [&#039;Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($params, JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 30,
]);

$resp = curl_exec($ch);
curl_close($ch);
echo $resp;
Python
import time, hashlib, json, urllib.request

APP_ID  = "你的AppID"      # 没有则填 muzhiyun
APP_KEY = "你的AppKey"
URL     = "https://leikuang.muzhiyun.com/api/sfz2.do"

params = {
    "appid": "muzhiyun",
    "sendtime": "1790784000",
    "sfz": "350623198311044136",
    "xm": "李建华",
}
params["appid"]    = APP_ID
params["sendtime"] = str(int(time.time()))
params = dict(sorted(params.items()))  # 参数名升序
sign_src = "&".join(f"{k}={v}" for k, v in params.items()) + "&key=" + APP_KEY
params["sign"] = hashlib.md5(sign_src.encode("utf-8")).hexdigest().upper()

req = urllib.request.Request(
    URL,
    data=json.dumps(params).encode("utf-8"),
    headers={"Content-Type": "application/json"},
    method="POST",
)
print(urllib.request.urlopen(req, timeout=30).read().decode("utf-8"))
JavaScript
const url = "https://leikuang.muzhiyun.com/api/sfz2.do";
const params = {
  &#039;appid': 'muzhiyun',
  &#039;sendtime': '1790784000',
  &#039;sfz': '350623198311044136',
  &#039;xm': '李建华',
  appid: "你的AppID",
  sendtime: String(Math.floor(Date.now()/1000)),
  // sign: 按上文「签名算法」在前端算 md5(ksort(k=v&…)&key=AppKey) 后填入
};
fetch(url, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(params),
}).then(r => r.json()).then(console.log);

7、注意事项

1、必传参数:xm 真实姓名(1~50 字符,中文可含·用于少数民族姓名,或英文)、sfz 身份证号码(15/17/18 位均可,15/17 位会自动升位补全为 18 位;18 位须校验码合法)。
2、返回 ok=1 表示核验完成:match=true 为「实名信息正确」,match=false 为「身份证与姓名不匹配」;birthday/sex/address 为从证件号解析的出生日期、性别、户籍地(已脱敏)。
3、返回 ok=0 表示失败:多为参数非法、证件号不存在或上游异常(msg 给出原因)。
4、本接口为付费接口,按次计费(每次成功发起核验即扣费,不论 match 真假;上游异常不缓存但同样消耗本次调用配额),余额不足时返回「您的余额不足,请充值后再调用」。
5、相同 (xm+sfz) 的明确结论本地缓存 44 小时;超过 44 小时自动重新核验上游。
6、响应中的 xm/sfz 均为脱敏展示(姓名隐去末字、证件号隐去中间),原始信息不会下发。
7、鉴权三项(appid / sendtime / sign)为所有开放接口通用必填,签名算法见下方「请求参数」说明。
AI 客服
拇指云 AI 客服
在线 · 工作日 9:00-18:00
智能客服在线,回复由 AI 自动生成