ID Verification提供Web SDK,帮助您在浏览器或内嵌webview中实现eKYC远程身份验证功能。本文介绍通过PC或移动端H5网页接入ID Verification的流程。
前提条件
支持的最低操作系统版本:Android 5+、iOS 11+。
支持的浏览器:
iOS:Safari。从iOS 14.3开始支持Chrome、Firefox、Microsoft Edge和WKWebView。
安卓:推荐Chrome60+、Firefox58+。对于Android中的其他浏览器,行为可能因设备而异。
所需权限:网络和摄像头,媒体采集需要HTTPS部署。
集成过程中,不要对TransactionUrl做任何操作或修改,否则会报错。
为保障认证安全有效,认证URL仅能使用一次,URL的重复使用也会报错。
启动eKYC
在代码中引入如下JS文件,并调用函数
getMetaInfo()
获取MetaInfo。
<script type="text/javascript" src="https://hkwebcdn.yuncloudauth.com/cdn/jsvm_all.js" ></script>
在调用ID Verification-KYC服务端发起认证请求时,需传入获取的MetaInfo值。
调用您自己的业务服务端接口初始化,获取 TransactionUrl,并在浏览器中加载该链接进行认证。
代码示例
<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Title</title>
<!-- 引入该JS,全局注入getMetaInfo方法 -->
<!-- Introduce this JS, inject the getMetaInfo method globally -->
<script type="text/javascript" src="https://hkwebcdn.yuncloudauth.com/cdn/jsvm_all.js" ></script>
</head>
<body>
<div></div>
<script>
// 在调用服务端初始化请求时需要传入该MetaInfo值
var MetaInfo = window.getMetaInfo();
// 接下来您进行调用服务端初始化请求获取TransactionUrl
var TransactionUrl = ''; // 此处值应为调用服务端初始化接口返回的TransactionUrl
// 接下来直接跳转TransactionUrl即可开始服务
window.location.href = TransactionUrl;
</script>
</body>
</html>
结果解析
在服务端初始化请求中传入ReturnUrl参数为商户自定义参数,认证结果会在认证完成后拼接在ReturnUrl后作为参数返回给商户。由于传入路由模式的不同,response解析结果会有差异。
路由模式 | ReturnUrl示例 | 认证后打开的ReturnUrl示例 |
普通网页 | https://aliyundoc.com | https://aliyundoc.com/?response=%7B%22resultCode%22%3A%22%22%2C%22resultMessage%22%3A%22%22%2C%22ocrResult%22%3A%7B%22code%22%3A%22%22%2C%22reason%22%3A%22%22%2C%22extInfo%22%3A%7B%22certifyId%22%3A%22%22%7D%7D%2C%22faceResult%22%3A%7B%22code%22%3A%22%22%2C%22subCode%22%3A%22%22%2C%22reason%22%3A%22%22%2C%22extInfo%22%3A%7B%22certifyId%22%3A%22%22%7D%7D%7D |
https://aliyundoc.com/index.html | https://aliyundoc.com/index.html?response=%7B%22resultCode%22%3A%22%22%2C%22resultMessage%22%3A%22%22%2C%22ocrResult%22%3A%7B%22code%22%3A%22%22%2C%22reason%22%3A%22%22%2C%22extInfo%22%3A%7B%22certifyId%22%3A%22%22%7D%7D%2C%22faceResult%22%3A%7B%22code%22%3A%22%22%2C%22subCode%22%3A%22%22%2C%22reason%22%3A%22%22%2C%22extInfo%22%3A%7B%22certifyId%22%3A%22%22%7D%7D%7D | |
history路由不带页面锚点(#) | https://aliyundoc.com/xxx/ | https://aliyundoc.com/xxx?response=%7B%22resultCode%22%3A%22%22%2C%22resultMessage%22%3A%22%22%2C%22ocrResult%22%3A%7B%22code%22%3A%22%22%2C%22reason%22%3A%22%22%2C%22extInfo%22%3A%7B%22certifyId%22%3A%22%22%7D%7D%2C%22faceResult%22%3A%7B%22code%22%3A%22%22%2C%22subCode%22%3A%22%22%2C%22reason%22%3A%22%22%2C%22extInfo%22%3A%7B%22certifyId%22%3A%22%22%7D%7D%7D |
history路由带页面锚点(#) | https://aliyundoc.com/xxx/#xxx | https://aliyundoc.com/xxx?response=%257B%2522resultCode%2522%253A%2522%2522%252C%2522resultMessage%2522%253A%2522%2522%252C%2522ocrResult%2522%253A%257B%2522code%2522%253A%2522%2522%252C%2522reason%2522%253A%2522%2522%252C%2522extInfo%2522%253A%257B%2522certifyId%2522%253A%2522%2522%257D%257D%252C%2522faceResult%2522%253A%257B%2522code%2522%253A%2522%2522%252C%2522subCode%2522%253A%2522%2522%252C%2522reason%2522%253A%2522%2522%252C%2522extInfo%2522%253A%257B%2522certifyId%2522%253A%2522%2522%257D%257D%257D#xxx |
hash路由 | https://aliyundoc.com/#/aaa/bbb | https://aliyundoc.com/?response=%257B%2522resultCode%2522%253A%2522%2522%252C%2522resultMessage%2522%253A%2522%2522%252C%2522ocrResult%2522%253A%257B%2522code%2522%253A%2522%2522%252C%2522reason%2522%253A%2522%2522%252C%2522extInfo%2522%253A%257B%2522certifyId%2522%253A%2522%2522%257D%257D%252C%2522faceResult%2522%253A%257B%2522code%2522%253A%2522%2522%252C%2522subCode%2522%253A%2522%2522%252C%2522reason%2522%253A%2522%2522%252C%2522extInfo%2522%253A%257B%2522certifyId%2522%253A%2522%2522%257D%257D%257D/#/aaa/bbb |
解析response代码示例
普通网页
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<script>
// 假设window.location.href为:
// window.location.href = https://aliyundoc.com
// 或
// window.location.href = https://aliyundoc.com/index.html
// 初始化url对象
var url = new URL(window.location.href);
// 解析response
var response = JSON.parse(url.searchParams.get('response'));
// response = {
// resultCode: '',
// resultMessage: '',
// ocrResult: {code: '',reason: '', extInfo: {certifyId: ''}},
// faceResult: {code: '',subCode: '',reason: '', extInfo: {certifyId: ''}}
// }
</script>
</body>
</html>
history路由不带页面锚点(#)
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<script>
// 假设window.location.href为:
// window.location.href = https://aliyundoc.com/xxx
// 初始化url对象
var url = new URL(window.location.href);
// 解析response
var response = JSON.parse(url.searchParams.get('response'));
// response = {
// resultCode: '',
// resultMessage: '',
// ocrResult: {code: '',reason: '', extInfo: {certifyId: ''}},
// faceResult: {code: '',subCode: '',reason: '', extInfo: {certifyId: ''}}
// }
</script>
</body>
</html>
history路由带页面锚点(#)
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<script>
// 假设window.location.href为:
// window.location.href = https://aliyundoc.com/xxx/#xxx
// 初始化url对象
var url = new URL(window.location.href);
// 解析response
var response = JSON.parse(
decodeURIComponent(url.searchParams.get('response'))
);
// response = {
// resultCode: '',
// resultMessage: '',
// ocrResult: {code: '',reason: '', extInfo: {certifyId: ''}},
// faceResult: {code: '',subCode: '',reason: '', extInfo: {certifyId: ''}}
// }
</script>
</body>
</html>
hash路由
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<script>
// 假设window.location.href为:
// window.location.href = https://aliyundoc.com/#/aaa/bbb
// 初始化url对象
var url = new URL(window.location.href);
// 解析response
var response = JSON.parse(
decodeURIComponent(url.searchParams.get('response'))
);
// response = {
// resultCode: '',
// resultMessage: '',
// ocrResult: {code: '',reason: '', extInfo: {certifyId: ''}},
// faceResult: {code: '',subCode: '',reason: '', extInfo: {certifyId: ''}}
// }
</script>
</body>
</html>
客户端结果码说明
结果码 | 是否计费 | 结果码描述 |
1000 | 是 | 用户完成了刷脸过程,认证建议结果为通过。 该结果仅供参考,可通过调用服务端CheckResult接口获取最终认证结果,进行下一步处理。 |
1001 | 是 | 用户完成了刷脸过程,认证建议结果为未通过。 该结果仅供参考,可通过调用服务端CheckResult接口获取最终认证结果,进行下一步处理。 |
1002 | 否 | 系统错误。 |
1003 | 否 | SDK初始化失败,请确认客户端时间是否正确。 |
1004 | 否 | 相机权限错误。请参考以下步骤尝试解决:
|
1005 | 否 | 网络错误。 |
1006 | 否 | 用户退出。 |
1007 | 否 | TransactionId无效. |
1009 | 否 | 客户端时间戳错误。 |
1011 | 否 | 提交证件类型错误。 |
1012 | 否 | 识别出的证件关键信息缺失或格式校验失败。 |
1013 | 否 | 图片质量不佳。 |
1014 | 否 | 错误次数超出上限。 |
新增语言
根据配置模板,将需新增的语言配置转换为JSON字符串,并通过入参调用Initialize接口完成初始化,从而实现最终的对客展示效果。
配置方法
通用文案对应语言配置:在languageContent中添加对应语言的key和内容。
OCR结果页对应语言配置:在ocrResultContent的
label
/placeholder
/text
中添加对应的语言key和内容。新增语言对应配置:在supportedLanguage中添加对应语言
key
和label
,切换语言时需使用。
目前自定义语言配置仅支持websdk模式,PC模式下暂不支持。
示例
const languageConfig = {
defaultLanguage: 'ja',
languageContent: {
'请将证件正面放入框内': {
zh: '请将证件正面放入框内(修改)', // 修改默认文案
ja: '身分証明書の表面をフレームに入れてください', // 添加新语言文案
},
// ...
},
ocrResultContent: {
// 中国 身份证
CHNFields: {
name: {
label: { ja: "中国語の名前"},
placeholder: {
ja: "中国語の名前",
},
},
// ...
},
},
supportedLanguage: [
{
key: 'ja',
label: '日本語'
}
],
titleTranslate: {
ekyc: {
zh: 'eKYC',
ja: 'IDと顔認証',
},
// ...
}
};
配置模板
{
"defaultLanguage": "zh",
"languageContent": {
"请将证件正面放入框内": {
"zh": "请将证件正面放入框内",
"TW": "請將證件正面放入框內",
"en": "Place your ID within the frame and take a picture"
},
"提交": {
"zh": "提交",
"TW": "提交",
"en": "Submit"
},
"识别超时": {
"zh": "识别超时",
"TW": "識別超時",
"en": "Time out"
},
"重新拍摄": {
"zh": "重新拍摄",
"TW": "重新拍攝",
"en": "Retake"
},
"离远一点": {
"zh": "离远一点",
"TW": "離遠一點",
"en": "Move further away"
},
"靠近一点": {
"zh": "靠近一点",
"TW": "靠近一點",
"en": "Move closer"
},
"没有检测到脸": {
"zh": "没有检测到脸",
"TW": "未能檢測到臉孔",
"en": "No face detected"
},
"请保持不动": {
"zh": "请保持不动",
"TW": "請保持不動",
"en": "Watch the screen"
},
"脸部亮一点": {
"zh": "脸部亮一点",
"TW": "臉部亮一點",
"en": "Brighten up your face"
},
"眨眨眼": {
"zh": "眨眨眼",
"TW": "眨眨眼",
"en": "Blink"
},
"正在处理": {
"zh": "正在处理",
"TW": "處理中…",
"en": "Processing"
},
"请确保证件清晰完整,无遮挡和反光": {
"zh": "请确保证件清晰完整,无遮挡和反光",
"TW": "請確保證件清晰完整,無遮擋和反光",
"en": "Make sure your ID is fully visible, glare free and not blurrred."
},
"识别失败次数超限": {
"zh": "识别失败次数超限",
"TW": "識別失敗次數超限",
"en": "You have reached the maximum number of attempts. Please try later."
},
"识别结果": {
"zh": "识别结果",
"TW": "識別結果",
"en": "OCR Result"
},
"确认无误": {
"zh": "确认无误",
"TW": "確認無誤",
"en": "Submit"
},
"再试一次": {
"zh": "再试一次",
"TW": "再試一次",
"en": "Try Again"
},
"退出": {
"zh": "退出",
"TW": "退出",
"en": "Quit"
},
"确定退出吗?": {
"zh": "确定退出吗?",
"TW": "確定退出嗎?",
"en": "Are you sure to quit?"
},
"取消": {
"zh": "取消",
"TW": "取消",
"en": "Cancel"
},
"确定": {
"zh": "确定",
"TW": "確定",
"en": "OK"
},
"刷脸次数过多,请稍后再试": {
"zh": "刷脸次数过多,请稍后再试",
"TW": "臉部驗證次數過多,請稍後再試",
"en": "Facial recognition has been performed too frequently. Try again later"
},
"我知道了": {
"zh": "我知道了",
"TW": "我知道了",
"en": "OK"
},
"操作超时": {
"zh": "操作超时",
"TW": "操作超時",
"en": "The operation timed out"
},
"网络不给力,请重试": {
"zh": "网络不给力,请重试",
"TW": "網絡不穩定,請重試",
"en": "Check network connectivity"
},
"重试次数过多,请稍后再试": {
"zh": "重试次数过多,请稍后再试",
"TW": "重試次數過多,請稍後再試",
"en": "Recognition has failed too frequently"
},
"识别失败": {
"zh": "识别失败",
"TW": "識別失敗",
"en": "Recognition failed"
},
"抱歉,系统出错了,请再试一次": {
"zh": "抱歉,系统出错了,请再试一次",
"TW": "抱歉,系統出錯了,請再試一次",
"en": "Sorry, system error. Please try again later."
},
"提示": {
"zh": "提示",
"TW": "提示",
"en": "Tips"
},
"程序异常": {
"zh": "程序异常",
"TW": "程序異常",
"en": "System Error"
},
"签名异常": {
"zh": "签名异常",
"TW": "簽名異常",
"en": "Verify Signature Failed."
},
"无效的认证流程,请返回重试": {
"zh": "无效的认证流程,请返回重试",
"TW": "無效的認證流程, 請返回重試",
"en": "Invalid verification process. Please try again."
},
"图片上传失败": {
"zh": "图片上传失败",
"TW": "圖片上傳失敗",
"en": "Photo Upload failed"
},
"认证失败": {
"zh": "认证失败",
"TW": "認證失敗",
"en": "Verification failed"
},
"请正对手机并保持亮度": {
"zh": "请正对手机并保持亮度",
"TW": "請正對手機並保持亮度",
"en": "Face straight at the phone and ensure your face is light and clear."
},
"重试": {
"zh": "重试",
"TW": "重試",
"en": "Try Again"
},
"正对手机,更容易成功": {
"zh": "正对手机,更容易成功",
"TW": "正對手機,更容易成功",
"en": "The scan is more likely to succeed if you directly face your mobile phone"
},
"未能识别人脸": {
"zh": "未能识别人脸",
"TW": "未能識別人臉",
"en": "No Face Detected"
},
"协议初始化失败,请返回重试": {
"zh": "协议初始化失败,请返回重试",
"TW": "協議初始化失敗,請返回重試",
"en": "Protocol initialization failed, please try again"
},
"跳转失败,请手动返回": {
"zh": "跳转失败,请手动返回",
"TW": "跳轉失敗,請手動返回",
"en": "Redirect failed. Please manually try again."
},
"请允许访问摄像头设备并重试": {
"zh": "请允许访问摄像头设备并重试",
"TW": "請允許訪問攝像頭設備並重試",
"en": "Please allow access to your camera and try again"
},
"摄像头设备不支持": {
"zh": "摄像头设备不支持",
"TW": "攝像頭設備不支持",
"en": "The camera is not supported"
},
"摄像头权限可能已关闭,请尝试在'设置'里开启": {
"zh": "摄像头权限可能已关闭,请尝试在'设置'里开启",
"TW": "請在'設置-隱私-相機'中允許訪問相機",
"en": "Access to your camera is forbidden. Check permissions"
},
"摄像头唤起失败": {
"zh": "摄像头唤起失败",
"TW": "無法啟動相機",
"en": "Failed to open camera"
},
"请检查您的网络并重试": {
"zh": "请检查您的网络并重试",
"TW": "請檢查您的網絡並重試",
"en": "Please check your internet connection and try again."
},
"请拍摄您的证件照片": {
"zh": "请拍摄您的证件照片",
"TW": "請拍攝您的證件照片",
"en": "Please take a photo of your ID card."
},
"请使用政府发行的原始证件": {
"zh": "请使用政府发行的原始证件",
"TW": "請使用政府簽發的原始證件",
"en": "Please use the original identity certificate issued by public service sectors."
},
"确认拍摄的证件清晰、无遮挡、无反光": {
"zh": "确认拍摄的证件清晰、无遮挡、无反光",
"TW": "請確保證件清晰完整,無遮擋和反光",
"en": "Make sure your ID is fully visible, glare free and not blurrred."
},
"请勿使用黑白图像": {
"zh": "请勿使用黑白图像",
"TW": "請勿使用黑白圖像",
"en": "Do not use photocopy images."
},
"拍摄您的脸部进行身份验证": {
"zh": "拍摄您的脸部进行身份验证",
"TW": "請拍攝您的臉部以進行身份驗證",
"en": "Please take a picture of your face for identity verification."
},
"避免遮挡": {
"zh": "避免遮挡",
"TW": "避免遮擋",
"en": "No cover"
},
"光线充足": {
"zh": "光线充足",
"TW": "確保光線充足",
"en": "Sufficient light"
},
"正对手机": {
"zh": "正对手机",
"TW": "正對手機",
"en": "Face the phone"
},
"开始认证": {
"zh": "开始认证",
"TW": "開始認證",
"en": "Start certification"
},
"复制链接": {
"zh": "复制链接",
"TW": "複製連結",
"en": "Copy Link."
},
"链接已复制": {
"zh": "链接已复制",
"TW": "鏈接已復制",
"en": "Copied to the clipboard."
},
"证件识别唤起失败": {
"zh": "证件识别唤起失败",
"TW": "證件識別喚起失敗",
"en": "Identity certificate recognition failed to be triggered. "
},
"刷脸验证唤起失败": {
"zh": "刷脸验证唤起失败",
"TW": "臉部驗證喚起失敗",
"en": "Facial recognition failed to be triggered. "
},
"身份验证唤起失败": {
"zh": "身份验证唤起失败",
"TW": "身份驗證喚起失敗",
"en": "Identity Verification failed to be triggered."
},
"证件识别唤起失败,请复制链接前往浏览器打开": {
"zh": "证件识别唤起失败,请复制链接前往浏览器打开",
"TW": "證件識別喚起失敗,請複製連結然後於瀏覽器打開",
"en": "Identity certificate recognition failed to be triggered. Please copy the link and go to a browser to open the link."
},
"刷脸验证唤起失败,请复制链接前往浏览器打开": {
"zh": "刷脸验证唤起失败,请复制链接前往浏览器打开",
"TW": "臉部驗證喚起失敗,請複製連結然後於瀏覽器打開",
"en": "Facial recognition failed to be triggered. Please copy the link and go to a browser to open the link."
},
"身份验证唤起失败,请复制链接前往浏览器打开": {
"zh": "身份验证唤起失败,请复制链接前往浏览器打开",
"TW": "身份驗證喚起失敗,請複製連結然後於瀏覽器打開",
"en": "Identity Verification failed to be triggered. Please copy the link and go to a browser to open the link."
},
"点击【复制链接】": {
"zh": "点击【复制链接】",
"TW": "點擊【複製連結】",
"en": "Click Copy Link."
},
"键入复制链接,开启刷脸验证": {
"zh": "键入复制链接,开启刷脸验证",
"TW": "貼上複製連結,開啟證件識別",
"en": "Paste the copied link and enable identity certificate recognition."
},
"打开浏览器,支持Safari,iOS 14.3+可选择Chrome、Firefox、Microsoft Edge": {
"zh": "打开浏览器,支持Safari,iOS 14.3+可选择Chrome、Firefox、Microsoft Edge",
"TW": "打開瀏覽器,支持Safari,iOS 14.3+可選擇Chrome、Firefox、Microsoft Edge",
"en": "Open a browser. Chrome, Firefox, Microsoft Edge in iOS 14.3+ and Safari are all supported."
},
"重新识别": {
"zh": "重新识别",
"TW": "重試",
"en": "Try Again"
},
"唤起身份验证操作流程": {
"zh": "唤起身份验证操作流程",
"TW": "喚起身份驗證操作流程",
"en": "Follow the steps below."
},
"唤起刷脸验证操作流程": {
"zh": "唤起刷脸验证操作流程",
"TW": "喚起刷臉驗證操作流程",
"en": "Follow the steps below."
},
"唤起证件识别操作流程": {
"zh": "唤起证件识别操作流程",
"TW": "喚起證件識別操作流程",
"en": "Follow the steps below."
},
"请拍摄您的脸部进行身份验证": {
"zh": "请拍摄您的脸部进行身份验证",
"TW": "請拍攝您的臉部以進行身份驗證",
"en": "Please take a picture of your face for identity verification."
},
"请确认你使用的证件类型符合要求": {
"zh": "请确认你使用的证件类型符合要求",
"TW": "請確認你使用的證件類型符合要求",
"en": "Make sure you are using the required type of document."
},
"检测不到证件": {
"zh": "检测不到证件",
"TW": "檢測不到證件",
"en": "No ID detected"
},
"请确保": {
"en": "Please ensure your",
"zh": "请确保",
"TW": "請確保"
},
"不为空": {
"en": "is not empty",
"zh": "不为空",
"TW": "不為空"
},
"请输入正确的": {
"en": "Please enter the correct",
"zh": "请输入正确的",
"TW": "請輸入正確的"
}
},
"ocrResultContent": {
"CHNFields": {
"name": {
"label": {
"en": "Chinese Name",
"zh": "中文姓名",
"TW": "中文姓名"
},
"placeholder": {
"en": "Chinese name",
"zh": "中文姓名",
"TW": "中文姓名"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "性别",
"TW": "性别"
},
"options": [
{
"value": "男",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "女",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
],
"placeholder": {
"en": "F/M",
"zh": "男/女",
"TW": "男/女"
}
},
"ethnicity": {
"label": {
"en": "Ethnicity",
"zh": "民族",
"TW": "民族"
},
"placeholder": {
"en": "Ethnicity",
"zh": "民族",
"TW": "民族"
}
},
"birthDate": {
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
},
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
}
},
"idNumber": {
"placeholder": {
"en": "ID Number",
"zh": "证件号码",
"TW": "證件號碼"
},
"label": {
"en": "ID Number",
"zh": "证件号码",
"TW": "證件號碼"
}
},
"address": {
"label": {
"en": "Address",
"zh": "住址",
"TW": "住址"
},
"placeholder": {
"en": "xx省xx市xx区xx969号",
"zh": "xx省xx市xx区xx969号",
"TW": "xx省xx市xx区xx969号"
}
}
},
"HKFields": {
"name": {
"label": {
"en": "Chinese Name",
"zh": "中文姓名",
"TW": "中文姓名"
},
"placeholder": {
"en": "Chinese name (if any)",
"zh": "中文姓名(如有)",
"TW": "中文姓名(如有)"
}
},
"englishName": {
"label": {
"en": "English Name",
"zh": "英文姓名",
"TW": "英文姓名"
},
"placeholder": {
"en": "English name",
"zh": "英文姓名",
"TW": "英文姓名"
}
},
"nameCode": {
"label": {
"en": "Name Code",
"zh": "中文电码",
"TW": "中文電碼"
},
"placeholder": {
"en": "Commercial Code (if any)",
"zh": "中文电码(如有)",
"TW": "中文电码(如有)"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "性别",
"TW": "性别"
},
"options": [
{
"value": "M",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "F",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
],
"placeholder": {
"en": "F/M",
"zh": "男/女",
"TW": "男/女"
}
},
"birthDate": {
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
},
"placeholder": {
"en": "dd-mm-yyyy",
"zh": "日-月-年",
"TW": "日-月-年"
}
},
"idNumber": {
"label": {
"en": "ID Number",
"zh": "证件号码",
"TW": "證件號碼"
},
"placeholder": {
"en": "e.g. C123456(0)",
"zh": "如:C123456(0)",
"TW": "如:C123456(0)"
}
},
"currentIssueDate": {
"label": {
"en": "Date of Issue",
"zh": "本次签发日期",
"TW": "本次簽發日期"
},
"placeholder": {
"en": "dd-mm-yy",
"zh": "日-月-年",
"TW": "日-月-年"
}
},
"firstIssueDate": {
"label": {
"en": "Date of First Issue",
"zh": "首次签发日期",
"TW": "首次簽發日期"
},
"placeholder": {
"en": "(MM-YY)",
"zh": "(月-年)",
"TW": "(月-年)"
}
},
"isPermanent": {
"label": {
"en": "Permanent",
"zh": "是否永久",
"TW": "是否永久"
},
"options": [
{
"value": "Y",
"text": {
"en": "Yes",
"zh": "是",
"TW": "是"
}
},
{
"value": "N",
"text": {
"en": "No",
"zh": "否",
"TW": "否"
}
}
],
"placeholder": {
"en": "Y/N",
"zh": "是/否",
"TW": "是/否"
}
},
"symbols": {
"placeholder": {
"en": "e.g. xxxAZ",
"zh": "如:xxxAZ",
"TW": "如:xxxAZ"
},
"label": {
"en": "Symbols",
"zh": "符号",
"TW": "符號"
}
}
},
"EEPFields": {
"name": {
"label": {
"en": "Chinese Name",
"zh": "中文姓名",
"TW": "中文姓名"
},
"placeholder": {
"en": "Name in Chinese",
"zh": "中文姓名",
"TW": "中文姓名"
}
},
"englishName": {
"label": {
"en": "English Name",
"zh": "英文姓名",
"TW": "英文姓名"
},
"placeholder": {
"en": "Name (pinyin)",
"zh": "姓名(拼音)",
"TW": "姓名(拼音)"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "性别",
"TW": "性别"
},
"options": [
{
"value": "男",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "女",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
],
"placeholder": {
"en": "F/M",
"zh": "男/女",
"TW": "男/女"
}
},
"birthDate": {
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
},
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
}
},
"idNumber": {
"label": {
"en": "ID Number",
"zh": "证件号码",
"TW": "證件號碼"
},
"placeholder": {
"en": "e.g. CC1234567",
"zh": "如:CC1234567",
"TW": "如:CC1234567"
}
},
"issueDate": {
"label": {
"en": "Date of Issue",
"zh": "签发日期",
"TW": "簽發日期"
},
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
}
},
"expiryDate": {
"label": {
"en": "Date of Expiry",
"zh": "失效日期",
"TW": "失效日期"
},
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
}
},
"placeOfIssue": {
"label": {
"en": "Place of Issue",
"zh": "签发地点",
"TW": "簽發地點"
},
"placeholder": {
"en": "e.g. 北京",
"zh": "如:北京",
"TW": "如:北京"
}
},
"originOfIssue": {
"label": {
"en": "Origin of Issue",
"zh": "签发机关",
"TW": "簽發機關"
},
"options": [
{
"value": "公安部出入境管理局",
"text": {
"en": "公安部出入境管理局",
"zh": "公安部出入境管理局",
"TW": "公安部出入境管理局"
}
},
{
"value": "中华人民共和国出入境管理局",
"text": {
"en": "中华人民共和国出入境管理局",
"zh": "中华人民共和国出入境管理局",
"TW": "中华人民共和国出入境管理局"
}
}
],
"placeholder": {
"en": "中华人民共和国出入境管理局",
"zh": "中华人民共和国出入境管理局",
"TW": "中华人民共和国出入境管理局"
}
}
},
"HRPFields": {
"name": {
"label": {
"en": "Chinese Name",
"zh": "中文姓名",
"TW": "中文姓名"
},
"placeholder": {
"en": "Name in Chinese",
"zh": "中文姓名",
"TW": "中文姓名"
}
},
"englishName": {
"label": {
"en": "English Name",
"zh": "英文姓名",
"TW": "英文姓名"
},
"placeholder": {
"en": "Name in English",
"zh": "姓名(拼音)",
"TW": "姓名(拼音)"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "性别",
"TW": "性别"
},
"options": [
{
"value": "男",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "女",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
],
"placeholder": {
"en": "F/M",
"zh": "男/女",
"TW": "男/女"
}
},
"birthDate": {
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
},
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
}
},
"idNumber": {
"placeholder": {
"en": "e.g. H12345678",
"zh": "如:H12345678",
"TW": "如:H12345678"
},
"label": {
"en": "ID Number",
"zh": "证件号码",
"TW": "證件號碼"
}
},
"issueDate": {
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
},
"label": {
"en": "Date of Issue",
"zh": "签发日期",
"TW": "簽發日期"
}
},
"expiryDate": {
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
},
"label": {
"en": "Date of Expiry",
"zh": "失效日期",
"TW": "失效日期"
}
},
"originOfIssue": {
"label": {
"en": "Origin of Issue",
"zh": "签发机关",
"TW": "簽發機關"
},
"options": [
{
"value": "公安部出入境管理局",
"text": {
"en": "公安部出入境管理局",
"zh": "公安部出入境管理局",
"TW": "公安部出入境管理局"
}
},
{
"value": "中华人民共和国出入境管理局",
"text": {
"en": "中华人民共和国出入境管理局",
"zh": "中华人民共和国出入境管理局",
"TW": "中华人民共和国出入境管理局"
}
}
],
"placeholder": {
"en": "中华人民共和国出入境管理局",
"zh": "中华人民共和国出入境管理局",
"TW": "中华人民共和国出入境管理局"
}
}
},
"WPFilelds": {
"surname": {
"placeholder": {
"en": "First name",
"zh": "姓",
"TW": "姓"
},
"label": {
"en": "Surname",
"zh": "姓",
"TW": "姓"
}
},
"givenname": {
"placeholder": {
"en": "Last name",
"zh": "名",
"TW": "名"
},
"label": {
"en": "Given name",
"zh": "名",
"TW": "名"
}
},
"passportNo": {
"placeholder": {
"en": "please input passport No.",
"zh": "请输入护照号码",
"TW": "請輸入護照號碼"
},
"label": {
"en": "Passport Number",
"zh": "护照号码",
"TW": "護照號碼"
}
},
"nationality": {
"placeholder": {
"en": "Nationality",
"zh": "国籍",
"TW": "國籍"
},
"label": {
"en": "Nationality",
"zh": "国籍",
"TW": "國籍"
}
},
"sex": {
"placeholder": {
"en": "e.g. F/M",
"zh": "男/女",
"TW": "男/女"
},
"label": {
"en": "Sex",
"zh": "性别",
"TW": "性别"
},
"options": [
{
"value": "M",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "F",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
]
},
"birthDate": {
"placeholder": {
"en": "dd-mm-yyyy",
"zh": "日-月-年",
"TW": "日-月-年"
},
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
}
},
"countryCode": {
"placeholder": {
"en": "e.g. CHN",
"zh": "如:CHN",
"TW": "如:CHN"
},
"label": {
"en": "Country Code",
"zh": "国家码",
"TW": "國家碼"
}
},
"expiryDate": {
"placeholder": {
"en": "dd-mm-yyyy",
"zh": "日-月-年",
"TW": "日-月-年"
},
"label": {
"en": "Date of Expiry",
"zh": "失效日期",
"TW": "失效日期"
}
}
},
"BIRFilelds": {
"surnameCN": {
"placeholder": {
"en": "Chinese surname",
"zh": "中文姓",
"TW": "中文姓"
},
"label": {
"en": "Surname CN",
"zh": "中文姓",
"TW": "中文姓"
}
},
"givennameCN": {
"placeholder": {
"en": "Chinese given name",
"zh": "中文名",
"TW": "中文名"
},
"label": {
"en": "Given name CN",
"zh": "中文名",
"TW": "中文名"
}
},
"surname": {
"placeholder": {
"en": "Family name",
"zh": "英文姓",
"TW": "英文姓"
},
"label": {
"en": "Surname",
"zh": "英文姓",
"TW": "英文姓"
}
},
"givenname": {
"placeholder": {
"en": "First name(s)",
"zh": "英文名",
"TW": "英文名"
},
"label": {
"en": "Given name",
"zh": "英文名",
"TW": "英文名"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "性别",
"TW": "性别"
},
"options": [
{
"value": "M",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "F",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
],
"placeholder": {
"en": "e.g. F/M",
"zh": "男/女",
"TW": "男/女"
}
},
"birthDate": {
"placeholder": {
"en": "dd-mm-yyyy",
"zh": "日-月-年",
"TW": "日-月-年"
},
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
}
},
"idNumber": {
"placeholder": {
"en": "e.g. 1234567(8)",
"zh": "如:1234567(8)",
"TW": "如:1234567(8)"
},
"label": {
"en": "ID Number",
"zh": "证件号码",
"TW": "證件號碼"
}
},
"expiryDate": {
"placeholder": {
"en": "dd-mm-yyyy",
"zh": "日-月-年",
"TW": "日-月-年"
},
"label": {
"en": "Date of Expiry",
"zh": "失效日期",
"TW": "失效日期"
}
},
"placeOfBirth": {
"placeholder": {
"en": "e.g. AS",
"zh": "如:AS",
"TW": "如:AS"
},
"label": {
"en": "Place of Birth",
"zh": "出生地代码",
"TW": "出生地代碼"
}
}
},
"MTFilelds": {
"name": {
"label": {
"en": "Chinese Name",
"zh": "中文姓名",
"TW": "中文姓名"
},
"placeholder": {
"en": "Name in Chinese",
"zh": "中文姓名",
"TW": "中文姓名"
}
},
"englishName": {
"placeholder": {
"en": "Name in English",
"zh": "姓名(拼音)",
"TW": "姓名(拼音)"
},
"label": {
"en": "English Name",
"zh": "英文姓名",
"TW": "英文姓名"
}
},
"sex": {
"placeholder": {
"en": "F/M",
"zh": "男/女",
"TW": "男/女"
},
"label": {
"en": "Sex",
"zh": "性别",
"TW": "性别"
},
"options": [
{
"value": "男",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "女",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
]
},
"birthDate": {
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
},
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
}
},
"idNumber": {
"placeholder": {
"en": "e.g. 12345678",
"zh": "如:12345678",
"TW": "如:12345678"
},
"label": {
"en": "ID Number",
"zh": "证件号码",
"TW": "證件號碼"
}
},
"issueDate": {
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
},
"label": {
"en": "Date of Issue",
"zh": "签发日期",
"TW": "簽發日期"
}
},
"expiryDate": {
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
},
"label": {
"en": "Date of Expiry",
"zh": "失效日期",
"TW": "失效日期"
}
},
"originOfIssue": {
"placeholder": {
"en": "中华人民共和国出入境管理局",
"zh": "中华人民共和国出入境管理局",
"TW": "中华人民共和国出入境管理局"
},
"label": {
"en": "Origin of Issue",
"zh": "签发机关",
"TW": "簽發機關"
},
"options": [
{
"value": "中华人民共和国出入境管理局",
"text": {
"en": "中华人民共和国出入境管理局",
"zh": "中华人民共和国出入境管理局",
"TW": "中华人民共和国出入境管理局"
}
}
]
},
"placeOfIssue": {
"placeholder": {
"en": "e.g. 北京",
"zh": "如:北京",
"TW": "如:北京"
},
"label": {
"en": "Place of Issue",
"zh": "签发地点",
"TW": "簽發地點"
}
}
},
"PHFilelds": {
"crn": {
"label": {
"en": "ID",
"zh": "",
"TW": ""
}
},
"surname": {
"label": {
"en": "Surname",
"zh": "",
"TW": ""
}
},
"givenname": {
"label": {
"en": "Given name",
"zh": "",
"TW": ""
}
},
"middlename": {
"label": {
"en": "Middlename",
"zh": "",
"TW": ""
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "",
"TW": ""
}
},
"birthDate": {
"label": {
"en": "Date of Expiry",
"zh": "",
"TW": ""
}
},
"address": {
"label": {
"en": "Address",
"zh": "",
"TW": ""
}
}
},
"ID_KTPFilelds": {
"idNumber": {
"label": {
"en": "ID",
"zh": "ID",
"TW": "ID"
}
},
"name": {
"label": {
"en": "Name",
"zh": "Name",
"TW": "Name"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "Sex",
"TW": "Sex"
}
},
"birthDate": {
"label": {
"en": "Date of Expiry",
"zh": "Date of Expiry",
"TW": "Date of Expiry"
}
},
"blood": {
"label": {
"en": "Blood",
"zh": "Blood",
"TW": "Blood"
}
},
"address": {
"label": {
"en": "Address",
"zh": "Address",
"TW": "Address"
}
},
"street": {
"label": {
"en": "Street",
"zh": "Street",
"TW": "Street"
}
},
"county": {
"label": {
"en": "County",
"zh": "County",
"TW": "County"
}
},
"district": {
"label": {
"en": "District",
"zh": "District",
"TW": "District"
}
},
"religion": {
"label": {
"en": "Religion",
"zh": "Religion",
"TW": "Religion"
}
},
"marriage": {
"label": {
"en": "Marriage",
"zh": "Marriage",
"TW": "Marriage"
}
},
"job": {
"label": {
"en": "Job",
"zh": "Job",
"TW": "Job"
}
},
"nationality": {
"label": {
"en": "Country",
"zh": "Country",
"TW": "Country"
}
},
"expiryDate": {
"label": {
"en": "Expires",
"zh": "Expires",
"TW": "Expires"
}
},
"province": {
"label": {
"en": "Province",
"zh": "Province",
"TW": "Province"
}
},
"city": {
"label": {
"en": "City",
"zh": "City",
"TW": "City"
}
},
"issueDate": {
"label": {
"en": "issueDate",
"zh": "issueDate",
"TW": "issueDate"
}
}
},
"MYFilelds": {
"idNumber": {
"label": {
"en": "ID",
"zh": "ID",
"TW": "ID"
}
},
"name": {
"label": {
"en": "Name",
"zh": "Name",
"TW": "Name"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "Sex",
"TW": "Sex"
}
},
"nationality": {
"label": {
"en": "Country",
"zh": "Country",
"TW": "Country"
}
},
"address": {
"label": {
"en": "Address",
"zh": "Address",
"TW": "Address"
}
}
}
},
"supportedLanguage": [
{
"key": "zh",
"label": "中文"
},
{
"key": "en",
"label": "English"
},
{
"key": "TW",
"label": "繁體中文"
}
],
"titleTranslate": {
"ekyc": {
"zh": "eKYC",
"TW": "eKYC",
"en": "eKYC"
},
"ocr": {
"zh": "证件识别",
"TW": "證件識別",
"en": "Identity certificate recognition"
},
"face": {
"zh": "刷脸验证",
"TW": "臉部驗證",
"en": "Facial recognition"
}
}
}
zh、TW、en为默认支持语言,如需修改默认语言文案,则直接修改语言key对应的内容即可;反之,则使用默认语言配置和默认文案。
为减小初始化请求大小,建议只传新增的语言配置和需要修改的默认配置,其他的阿里云侧会采用默认配置。
附录
1. OCR结果页对应证件映射表
ocrResultContent | 对应证件 |
WPFilelds | 全球护照 |
CHNFields | 中国内地第二代居民身份证 |
HKFields | 香港居民身份证 |
EEPFields | 往来港澳通行证 |
HRPFields | 港澳居民来往内地通行证 |
BIRFilelds | 澳门身份证 |
MTFilelds | 台湾居民来往大陆通行证 |
2. 语言缩写key
参考HTML Language Code Reference:
const languageKeyList = [
// 默认支持的三种语言
{ code: 'zh', name: 'Chinese (Simplified)' }, //简体中文
{ code: 'TW', name: 'Chinese (Traditional)' }, // 繁体中文
{ code: 'en', name: 'English' }, // 英文
// 其他语言(按语言全称字符顺序排列)
{ code: 'ab', name: 'Abkhazian' },
{ code: 'aa', name: 'Afar' },
{ code: 'af', name: 'Afrikaans' },
{ code: 'ak', name: 'Akan' },
{ code: 'sq', name: 'Albanian' },
{ code: 'am', name: 'Amharic' },
{ code: 'ar', name: 'Arabic' },
{ code: 'an', name: 'Aragonese' },
{ code: 'hy', name: 'Armenian' },
{ code: 'as', name: 'Assamese' },
{ code: 'av', name: 'Avaric' },
{ code: 'ae', name: 'Avestan' },
{ code: 'ay', name: 'Aymara' },
{ code: 'az', name: 'Azerbaijani' },
{ code: 'bm', name: 'Bambara' },
{ code: 'ba', name: 'Bashkir' },
{ code: 'eu', name: 'Basque' },
{ code: 'be', name: 'Belarusian' },
{ code: 'bn', name: 'Bengali (Bangla)' },
{ code: 'bh', name: 'Bihari' },
{ code: 'bi', name: 'Bislama' },
{ code: 'bs', name: 'Bosnian' },
{ code: 'br', name: 'Breton' },
{ code: 'bg', name: 'Bulgarian' },
{ code: 'my', name: 'Burmese' },
{ code: 'ca', name: 'Catalan' },
{ code: 'ch', name: 'Chamorro' },
{ code: 'ce', name: 'Chechen' },
{ code: 'ny', name: 'Chichewa, Chewa, Nyanja' },
{ code: 'cv', name: 'Chuvash' },
{ code: 'kw', name: 'Cornish' },
{ code: 'co', name: 'Corsican' },
{ code: 'cr', name: 'Cree' },
{ code: 'hr', name: 'Croatian' },
{ code: 'cs', name: 'Czech' },
{ code: 'da', name: 'Danish' },
{ code: 'dv', name: 'Divehi, Dhivehi, Maldivian' },
{ code: 'nl', name: 'Dutch' },
{ code: 'dz', name: 'Dzongkha' },
{ code: 'eo', name: 'Esperanto' },
{ code: 'et', name: 'Estonian' },
{ code: 'ee', name: 'Ewe' },
{ code: 'fo', name: 'Faroese' },
{ code: 'fj', name: 'Fijian' },
{ code: 'fi', name: 'Finnish' },
{ code: 'fr', name: 'French' },
{ code: 'ff', name: 'Fula, Fulah, Pulaar, Pular' },
{ code: 'gl', name: 'Galician' },
{ code: 'gd', name: 'Gaelic (Scottish)' },
{ code: 'gv', name: 'Gaelic (Manx)' },
{ code: 'ka', name: 'Georgian' },
{ code: 'de', name: 'German' },
{ code: 'el', name: 'Greek' },
{ code: 'kl', name: 'Greenlandic' },
{ code: 'gn', name: 'Guarani' },
{ code: 'gu', name: 'Gujarati' },
{ code: 'ht', name: 'Haitian Creole' },
{ code: 'ha', name: 'Hausa' },
{ code: 'he', name: 'Hebrew' },
{ code: 'hz', name: 'Herero' },
{ code: 'hi', name: 'Hindi' },
{ code: 'ho', name: 'Hiri Motu' },
{ code: 'hu', name: 'Hungarian' },
{ code: 'is', name: 'Icelandic' },
{ code: 'io', name: 'Ido' },
{ code: 'ig', name: 'Igbo' },
{ code: 'id, in', name: 'Indonesian' },
{ code: 'ia', name: 'Interlingua' },
{ code: 'ie', name: 'Interlingue' },
{ code: 'iu', name: 'Inuktitut' },
{ code: 'ik', name: 'Inupiak' },
{ code: 'ga', name: 'Irish' },
{ code: 'it', name: 'Italian' },
{ code: 'ja', name: 'Japanese' },
{ code: 'jv', name: 'Javanese' },
{ code: 'kl', name: 'Kalaallisut, Greenlandic' },
{ code: 'kn', name: 'Kannada' },
{ code: 'kr', name: 'Kanuri' },
{ code: 'ks', name: 'Kashmiri' },
{ code: 'kk', name: 'Kazakh' },
{ code: 'km', name: 'Khmer' },
{ code: 'ki', name: 'Kikuyu' },
{ code: 'rw', name: 'Kinyarwanda (Rwanda)' },
{ code: 'rn', name: 'Kirundi' },
{ code: 'ky', name: 'Kyrgyz' },
{ code: 'kv', name: 'Komi' },
{ code: 'kg', name: 'Kongo' },
{ code: 'ko', name: 'Korean' },
{ code: 'ku', name: 'Kurdish' },
{ code: 'kj', name: 'Kwanyama' },
{ code: 'lo', name: 'Lao' },
{ code: 'la', name: 'Latin' },
{ code: 'lv', name: 'Latvian (Lettish)' },
{ code: 'li', name: 'Limburgish ( Limburger)' },
{ code: 'ln', name: 'Lingala' },
{ code: 'lt', name: 'Lithuanian' },
{ code: 'lu', name: 'Luga-Katanga' },
{ code: 'lg', name: 'Luganda, Ganda' },
{ code: 'lb', name: 'Luxembourgish' },
{ code: 'gv', name: 'Manx' },
{ code: 'mk', name: 'Macedonian' },
{ code: 'mg', name: 'Malagasy' },
{ code: 'ms', name: 'Malay' },
{ code: 'ml', name: 'Malayalam' },
{ code: 'mt', name: 'Maltese' },
{ code: 'mi', name: 'Maori' },
{ code: 'mr', name: 'Marathi' },
{ code: 'mh', name: 'Marshallese' },
{ code: 'mo', name: 'Moldavian' },
{ code: 'mn', name: 'Mongolian' },
{ code: 'na', name: 'Nauru' },
{ code: 'nv', name: 'Navajo' },
{ code: 'ng', name: 'Ndonga' },
{ code: 'nd', name: 'Northern Ndebele' },
{ code: 'ne', name: 'Nepali' },
{ code: 'no', name: 'Norwegian' },
{ code: 'nb', name: 'Norwegian bokmål' },
{ code: 'nn', name: 'Norwegian nynorsk' },
{ code: 'ii', name: 'Nuosu' },
{ code: 'oc', name: 'Occitan' },
{ code: 'oj', name: 'Ojibwe' },
{ code: 'cu', name: 'Old Church Slavonic, Old Bulgarian' },
{ code: 'or', name: 'Oriya' },
{ code: 'om', name: 'Oromo (Afaan Oromo)' },
{ code: 'os', name: 'Ossetian' },
{ code: 'pi', name: 'Pāli' },
{ code: 'ps', name: 'Pashto, Pushto' },
{ code: 'fa', name: 'Persian (Farsi)' },
{ code: 'pl', name: 'Polish' },
{ code: 'pt', name: 'Portuguese' },
{ code: 'pa', name: 'Punjabi (Eastern)' },
{ code: 'qu', name: 'Quechua' },
{ code: 'rm', name: 'Romansh' },
{ code: 'ro', name: 'Romanian' },
{ code: 'ru', name: 'Russian' },
{ code: 'se', name: 'Sami' },
{ code: 'sm', name: 'Samoan' },
{ code: 'sg', name: 'Sango' },
{ code: 'sa', name: 'Sanskrit' },
{ code: 'sr', name: 'Serbian' },
{ code: 'sh', name: 'Serbo-Croatian' },
{ code: 'st', name: 'Sesotho' },
{ code: 'tn', name: 'Setswana' },
{ code: 'sn', name: 'Shona' },
{ code: 'ii', name: 'Sichuan Yi' },
{ code: 'sd', name: 'Sindhi' },
{ code: 'si', name: 'Sinhalese' },
{ code: 'ss', name: 'Siswati' },
{ code: 'sk', name: 'Slovak' },
{ code: 'sl', name: 'Slovenian' },
{ code: 'so', name: 'Somali' },
{ code: 'nr', name: 'Southern Ndebele' },
{ code: 'es', name: 'Spanish' },
{ code: 'su', name: 'Sundanese' },
{ code: 'sw', name: 'Swahili (Kiswahili)' },
{ code: 'ss', name: 'Swati' },
{ code: 'sv', name: 'Swedish' },
{ code: 'tl', name: 'Tagalog' },
{ code: 'ty', name: 'Tahitian' },
{ code: 'tg', name: 'Tajik' },
{ code: 'ta', name: 'Tamil' },
{ code: 'tt', name: 'Tatar' },
{ code: 'te', name: 'Telugu' },
{ code: 'th', name: 'Thai' },
{ code: 'bo', name: 'Tibetan' },
{ code: 'ti', name: 'Tigrinya' },
{ code: 'to', name: 'Tonga' },
{ code: 'ts', name: 'Tsonga' },
{ code: 'tr', name: 'Turkish' },
{ code: 'tk', name: 'Turkmen' },
{ code: 'tw', name: 'Twi' },
{ code: 'ug', name: 'Uyghur' },
{ code: 'uk', name: 'Ukrainian' },
{ code: 'ur', name: 'Urdu' },
{ code: 'uz', name: 'Uzbek' },
{ code: 've', name: 'Venda' },
{ code: 'vi', name: 'Vietnamese' },
{ code: 'vo', name: 'Volapük' },
{ code: 'wa', name: 'Wallon' },
{ code: 'cy', name: 'Welsh' },
{ code: 'wo', name: 'Wolof' },
{ code: 'fy', name: 'Western Frisian' },
{ code: 'xh', name: 'Xhosa' },
{ code: 'yi, ji', name: 'Yiddish' },
{ code: 'yo', name: 'Yoruba' },
{ code: 'za', name: 'Zhuang, Chuang' },
{ code: 'zu', name: 'Zulu' },
];