uniappx插件nutpi-idcard 開發與使用指南(適配鴻蒙)
前言
nutpi-idcard
是一個基于 UTS (uni-app TypeScript Syntax) 開發的 uni-app 插件適配鴻蒙,主要用于解析身份證號碼,提取其中的關鍵信息,如地區、出生日期、性別等。本插件支持中國居民身份證、港澳臺居民居住證以及外國人永久居留身份證。
本文將詳細介紹 nutpi-idcard
插件的開發過程和使用方法,希望能為其他開發者提供一些參考。
插件功能
- 身份證號碼解析:能夠從身份證號碼中提取省市區(或國家/地區)、出生日期、性別等信息。
- 支持多種證件類型:
- 中國居民身份證
- 港澳臺居民居住證
- 外國人永久居留身份證
- 純 UTS 實現:確保了插件在 uni-app x 及其他支持 UTS 的環境中的兼容性和性能。
- 跨平臺支持:理論上支持所有 uni-app 支持的平臺,特別是針對 App (Android, iOS, HarmonyOS) 進行了適配。
開發過程
1. 項目初始化與環境搭建
插件的開發基于 HBuilderX,利用其對 uni-app 和 UTS 的良好支持。
- 創建 uni-app 項目:首先,創建一個標準的 uni-app 項目(如果還沒有的話)。
- 創建 uni_module:在項目根目錄下創建
uni_modules
文件夾(如果不存在),然后在其中創建nutpi-idcard
文件夾作為插件的根目錄。 - 配置文件
package.json
:在nutpi-idcard
目錄下創建package.json
文件,用于定義插件的基本信息、依賴、平臺支持等。關鍵配置項包括:id
: 插件的唯一標識。displayName
: 插件在 HBuilderX 中顯示的名稱。version
: 插件版本號。description
: 插件描述。author
: 作者信息-堅果派。contact
: 聯系方式。repository
: 代碼倉庫地址。engines
: HBuilderX 版本要求。dcloudext
: DCloud 擴展配置,如插件類型 (uts
)、銷售信息等。uni_modules
: uni-app 模塊配置,如依賴、加密、平臺支持等。
2. 核心邏輯實現 (utssdk
)
插件的核心代碼位于 utssdk
目錄下,針對不同平臺可以有不同的實現,但本項目中主要關注通用的 UTS 實現,特別是針對 HarmonyOS 的適配。
-
目錄結構:
nutpi-idcard/ ├── utssdk/ │ ├── app-harmony/ # HarmonyOS 平臺特定代碼 │ │ ├── index.uts # HarmonyOS 入口及核心邏輯 │ │ ├── interfaces.uts # TypeScript 接口定義 │ │ └── module/ │ │ └── data/ # 數據文件 (行政區劃、國家代碼) │ │ ├── china.uts │ │ └── international.uts │ ├── app-android/ # Android 平臺 (如果需要特定實現) │ ├── app-ios/ # iOS 平臺 (如果需要特定實現) │ ├── index.uts # 插件主入口 (通常導出各平臺實現) │ └── interfaces.uts # 通用接口定義 ├── package.json ├── readme.md └── changelog.md
-
數據準備 (
module/data/
):china.uts
: 存儲中國行政區劃代碼與名稱的映射。international.uts
: 存儲 ISO 3166-1 國家代碼與名稱的映射。
-
接口定義 (
interfaces.uts
):
定義了身份證解析結果的數據結構IDResult
。export interface IDResult {type?: string; // 證件類型sign?: string; // 簽發機關或地區country?: string; // 國家或地區birthday?: string; // 出生日期 (YYYY-MM-DD)sex?: string; // 性別 ('男' 或 '女')isValid?: boolean; // 校驗結果 (當前版本簡單返回 true) }
-
核心解析邏輯 (
app-harmony/index.uts
):
這是插件的核心,包含了主要的解析函數。parseID(id: string): IDResult
: 公開的 API 函數,根據身份證號碼的格式(通過正則表達式判斷)調用相應的內部解析函數。parserChina(id: string): IDResult
: 解析中國居民身份證和港澳臺居民居住證。- 通過身份證號碼的前6位確定省市區。
- 通過第7到14位確定出生日期。
- 通過第17位(順序碼的最后一位)確定性別。
parserInternational(id: string): IDResult
: 解析外國人永久居留身份證。- 通過第1到3位(國家或地區代碼)和
international.uts
數據確定國家。 - 通過第7到14位確定出生日期。
- 通過第17位確定性別。
- 通過第1到3位(國家或地區代碼)和
isIdCardValidInternal(id: string): boolean
: 身份證號碼有效性校驗函數。目前簡單返回true
,未來可以根據國家標準實現更復雜的校驗邏輯(如校驗碼計算)。
// idcard/uni_modules/nutpi-idcard/utssdk/app-harmony/index.uts import { chinaData as _china } from './module/data/china.uts'; import { internationalData as _international } from './module/data/international.uts'; import type { IDResult } from './interfaces.uts';function parserInternational(id: string): IDResult { /* ... */ } function parserChina(id: string): IDResult { /* ... */ } function isIdCardValidInternal(id: string): boolean { /* ... */ }export function parseID(id: string): IDResult {if(id.match(/^9\d{16}[0-9xX]$/)){ // 外國人永久居留身份證特征 (假設以9開頭)return parserInternational(id);}else if(id.match(/^\d{17}[0-9xX]$/)){ // 中國居民身份證特征return parserChina(id);}else{return { type: '未知類型' };} }
3. 插件入口 (index.uts
)
在 nutpi-idcard
根目錄下的 index.uts
文件通常作為插件的統一入口,它會根據當前運行平臺導出相應平臺的 parseID
函數。
// idcard/uni_modules/nutpi-idcard/index.uts
// #ifdef APP-HARMONY
export * from './utssdk/app-harmony/index.uts';
// #endif// #ifdef APP-PLUS || APP-VUE
// 假設 Android 和 iOS 使用相同的 UTS 邏輯,或者有單獨的 app-android/index.uts 和 app-ios/index.uts
// 如果 utssdk/index.uts 包含了 Android 和 iOS 的通用邏輯,可以這樣導出:
// export * from './utssdk/index.uts';
// 或者分別導出
// #ifdef APP-ANDROID
// export * from './utssdk/app-android/index.uts';
// #endif
// #ifdef APP-IOS
// export * from './utssdk/app-ios/index.uts';
// #endif
// #endif// 默認導出 (如果需要在非特定App平臺使用,或者作為H5等平臺的兜底)
// export * from './utssdk/index.uts'; // 假設 utssdk/index.uts 包含通用或web實現
注意:上述 index.uts
的條件編譯部分需要根據實際支持的平臺和代碼組織來編寫。如果主要目標是 HarmonyOS,則 APP-HARMONY
部分是關鍵。
4. 文檔編寫
readme.md
: 提供插件的詳細說明,包括功能特性、安裝方法、API 文檔、使用示例、作者信息等。changelog.md
: 記錄插件的版本更新歷史和主要變更。
5. 測試與調試
- 在 HBuilderX 中創建測試頁面,引入插件并調用
parseID
函數,傳入不同的身份證號碼進行測試。 - 關注控制臺輸出,確保解析結果的準確性。
- 針對不同平臺(特別是 HarmonyOS)進行真機或模擬器測試。
遇到的問題與解決
- UTS 模塊導入路徑:UTS 中模塊導入路徑需要精確。最初可能因為
method.uts
和index.uts
的拆分導致函數重復聲明或找不到定義的問題。通過將method.uts
的內容合并到index.uts
中解決了此問題。 - Git 推送標簽失敗:在版本發布時,如果本地沒有對應的 Git 標簽,
git push origin <tagname>
會失敗。通過先執行git tag <tagname>
創建本地標簽,然后再推送解決。 - 函數未定義錯誤:在頁面中調用插件函數時,如果導入路徑不正確或插件未正確導出函數,會導致
xxx is not defined
錯誤。仔細檢查插件的index.uts
導出邏輯和頁面中的導入路徑,確保一致。
如何使用 nutpi-idcard
插件
-
安裝插件:
- 從 DCloud 插件市場安裝。插件地址:https://ext.dcloud.net.cn/plugin?id=23728
- 或者,如果手動引入,將
nutpi-idcard
整個文件夾復制到你的 uni-app 項目的uni_modules
目錄下。
-
引入插件:在需要使用的頁面或組件的
<script setup lang="uts">
或<script lang="uts">
中引入插件。// 示例:在頁面的 <script setup lang="uts"> 中 import { parseID } from '@/uni_modules/nutpi-idcard'; // HBuilderX 會自動處理路徑映射 // 如果在 uni-app x 項目的 .uvue 文件中,路徑可能需要更明確,或者依賴 HBuilderX 的智能提示
-
調用解析函數:使用
parseID
函數解析身份證號碼。const idNumber = '110101199003070978'; // 替換為實際的身份證號碼 const idInfo = parseID(idNumber);if (idInfo) {console.log('證件類型:', idInfo.type);console.log('簽發地/國家:', idInfo.sign ?? idInfo.country);console.log('出生日期:', idInfo.birthday);console.log('性別:', idInfo.sex);console.log('是否有效:', idInfo.isValid); }
API 參考
parseID(id: string): IDResult
解析身份證號碼并返回包含詳細信息的對象。
-
參數:
id: string
- 需要解析的身份證號碼(18位中國居民身份證,或外國人永久居留身份證等)。
-
返回值:
IDResult
對象,其結構如下:interface IDResult {type?: string; // 證件類型 (例如:'居民身份證', '外國人永久居留身份證', '港澳臺居民居住證', '未知類型')sign?: string; // 簽發機關或地區信息 (例如:'北京市市轄區', '北京市朝陽區')country?: string; // 國家或地區 (例如:'中國', '無國籍' 或其他國家名稱,主要用于外國人身份證)birthday?: string; // 出生日期,格式為 'YYYY-MM-DD'sex?: string; // 性別 ('男' 或 '女')isValid?: boolean; // 身份證號碼是否有效 (當前版本簡單返回true,待實現詳細校驗邏輯) }
未來展望
- 完善校驗邏輯:實現更嚴格的身份證號碼校驗,包括校驗碼的計算與驗證。
- 更廣泛的證件類型支持:考慮支持更多國家或地區的身份證件類型。
- 性能優化:對數據查找和字符串處理進行優化,提高解析效率。
- 更詳細的錯誤提示:當輸入格式錯誤或無法解析時,提供更具體的錯誤信息。
- 單元測試:為插件編寫完善的單元測試,確保代碼質量和穩定性。
作者與聯系方式
- 作者:堅果派
- 公眾號:nutpi
- 電話:17752170152
- 官網:https://www.nutpi.net/
- 代碼倉庫:https://gitcode.com/nutpi/uni-idcard
希望這個插件能對您有所幫助!如果您有任何問題或建議,歡迎聯系。
堅果派
堅果派社區由小波、狼哥等人創建,團隊擁有數位華為HDE及1000+HarmonyOS開發者,以及若干其他領域的三十余位萬粉博主/UP主運營。
專注于分享的技術包括HarmonyOS/OpenHarmony、倉頡、ArkUI-X、元服務、AI、BlueOS操作系統等。團隊成員主要聚集在北京,上海,南京,深圳,廣州,蘇州、長沙、寧夏等地,目前已為華為、vivo、騰訊、亞馬遜以及三方技術社區提供各類開發咨詢服務100+。累計粉絲100+w,孵化開發者10w+,高校20+、企業10+。自研應用40款,三方庫80個,鴻蒙原生應用課程500+。持續助力鴻蒙倉頡等生態繁榮發展。