uniappx插件nutpi-idcard 開發與使用指南(適配鴻蒙)

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位確定性別。
    • 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.utsindex.uts 的拆分導致函數重復聲明或找不到定義的問題。通過將 method.uts 的內容合并到 index.uts 中解決了此問題。
  • Git 推送標簽失敗:在版本發布時,如果本地沒有對應的 Git 標簽,git push origin <tagname> 會失敗。通過先執行 git tag <tagname> 創建本地標簽,然后再推送解決。
  • 函數未定義錯誤:在頁面中調用插件函數時,如果導入路徑不正確或插件未正確導出函數,會導致 xxx is not defined 錯誤。仔細檢查插件的 index.uts 導出邏輯和頁面中的導入路徑,確保一致。

如何使用 nutpi-idcard 插件

  1. 安裝插件

    • 從 DCloud 插件市場安裝。插件地址:https://ext.dcloud.net.cn/plugin?id=23728
    • 或者,如果手動引入,將 nutpi-idcard 整個文件夾復制到你的 uni-app 項目的 uni_modules 目錄下。
  2. 引入插件:在需要使用的頁面或組件的 <script setup lang="uts"><script lang="uts"> 中引入插件。

    // 示例:在頁面的 <script setup lang="uts"> 中
    import { parseID } from '@/uni_modules/nutpi-idcard'; // HBuilderX 會自動處理路徑映射
    // 如果在 uni-app x 項目的 .uvue 文件中,路徑可能需要更明確,或者依賴 HBuilderX 的智能提示
    
  3. 調用解析函數:使用 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+。持續助力鴻蒙倉頡等生態繁榮發展。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83798.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83798.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83798.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Grafana-ECharts應用講解(玫瑰圖示例)

工具: MySQL 數據庫 MySQL Workbench 數據庫管理工具(方便編輯數據) Grafana v11.5.2 Business Charts 6.6(原 Echarts插件) 安裝 安裝 MySQL社區版安裝 MySQL Workbench安裝 Grafana在 Grafana 插件中搜索 Business Charts 進行安裝以上安裝步驟網上教程很多,自行搜…

React狀態管理Context API + useReducer

在 React 中&#xff0c;Context API useReducer 是一種輕量級的狀態管理方案&#xff0c;適合中小型應用或需要跨組件共享復雜狀態的場景。它避免了 Redux 的繁瑣配置&#xff0c;同時提供了清晰的狀態更新邏輯。 1. 基本使用步驟 (1) 定義 Reducer 類似于 Redux 的 reduce…

3 個優質的終端 GitHub 開源工具

1、Oh My Zsh Oh My Zsh 是一個幫助你管理和美化 zsh 終端的開源工具。它讓你的終端更炫酷、更高效。安裝后&#xff0c;你可以快速使用各種插件和主題&#xff0c;比如常見的 git 命令簡化、支持多種編程語言工具等&#xff0c;每次打開終端都會有驚喜。無論你是開發者還是普…

無人機巡檢智能邊緣計算終端技術方案??——基于EFISH-SCB-RK3588工控機/SAIL-RK3588核心板的國產化替代方案?

一、方案核心價值? ?實時AI處理?&#xff1a;6TOPS NPU實現無人機影像的實時缺陷檢測&#xff08;延遲&#xff1c;50ms&#xff09;?全國產化?&#xff1a;芯片、操作系統、算法工具鏈100%自主可控?極端環境適配?&#xff1a;-40℃~85℃穩定運行&#xff0c;IP65防護等…

SpringAI 1.0.0 正式版——利用Redis存儲會話(ChatMemory)

官方文檔&#xff1a;Chat Memory :: Spring AI Reference 1. 引言 SpringAI 1.0.0 改動了很多地方&#xff0c;本文根據官方的InMemoryChatMemoryRepository實現了自定義的RedisChatMemoryRepository&#xff0c;并使用MessageWindowChatMemory創建ChatMemory 2. 實現 2.1.…

RFC8489-STUN

0. 學習參考 RFC5389 中文翻譯 中文RFC RFC文檔 RFC翻譯 RFC中文版 RFC 5389&#xff1a;NAT 的會話遍歷實用程序 &#xff08;STUN&#xff09; --- RFC 5389: Session Traversal Utilities for NAT (STUN) 1. RFC 3489的演變 自 RFC 3489 發布以來的經驗發現&#xff0c;…

開始在本地部署自己的 Gitea 服務器

0.簡介 在軟件開發和團隊協作中&#xff0c;代碼管理是至關重要的環節。筆者一直使用gitblit管理自己的倉庫。然鵝&#xff0c;這個軟件已經很久沒有更新了。經過多方考察&#xff0c;發現Gitea 是一款輕量級的開源代碼托管平臺&#xff0c;具有易于部署、資源占用少、功能豐富…

Xsens-AAA工作室品質,為動畫師準備

每一幀都講述著一個故事&#xff0c;當動作真實呈現時&#xff0c;故事便鮮活起來。我們打造并改進了 Xsens Animate&#xff0c;助力專業人士突破數字動畫的界限。 通過升級后的 Xsens Animate&#xff0c;您可以獲得女性和男性解剖模型以及更精確的運動引擎&#xff0c;從一…

嵌入(Embedding)技術的實現原理與應用場景解析

嵌入&#xff08;Embedding&#xff09;技術的實現原理與應用場景解析 引言&#xff1a;從One-Hot到語義空間 在自然語言處理的演進歷程中&#xff0c;嵌入技術&#xff08;Embedding&#xff09;的誕生標志著一個重要轉折點——它讓離散的符號表示突破了維度詛咒&#xff0c…

金倉數據庫征文-金倉KES數據同步優化實踐:邏輯解碼與增量同步

目錄 一.同步場景與方案選型 二.什么是KES 三.同步環境配置 1.前置條件驗證 2.邏輯解碼配置 四.同步實施與問題排查 1.結構映射規則 2.增量數據捕獲 3.數據一致性校驗 五.性能調優實踐 1.同步線程優化 2.批量提交優化 3.資源監控指標 六.典型場景解決方案 1.雙向…

開源語義分割工具箱mmsegmentation基于Lovedata數據集訓練模型

開源語義分割工具箱mmsegmentation安裝環境 文章目錄 1、下載數據集2、整理數據集3、下載預訓練模型4、測試5、訓練模型參考官方數據處理步驟 https://github.com/open-mmlab/mmsegmentation/blob/main/docs/zh_cn/user_guides/2_dataset_prepare.md#loveda 數據集類別標簽:…

Python概率統計可視化——概率分布、假設檢驗與分子運動模型

Python概率統計可視化——概率分布、假設檢驗與分子運動模型 前言 概率統計作為描述不確定性和隨機現象的數學工具&#xff0c;廣泛應用于物理學、生物學、經濟學等領域。然而&#xff0c;抽象的概率分布和統計推斷過程往往難以直觀理解。可視化技術通過將概率密度、假設檢驗邏…

NLP學習路線圖(二十二): 循環神經網絡(RNN)

在自然語言處理&#xff08;NLP&#xff09;的廣闊天地中&#xff0c;序列數據是絕對的核心——無論是流淌的文本、連續的語音還是跳躍的時間序列&#xff0c;都蘊含著前后緊密關聯的信息。傳統神經網絡如同面對一幅打散的拼圖&#xff0c;無法理解詞語間的順序關系&#xff0c…

禪道5月更新速覽 | 新增交付物配置功能,支持建立跨執行任務依賴關系,研發效能平臺上線

禪道體驗又升級啦&#xff01;禪道5月新功能合集來啦&#xff0c;研發效能平臺與大家見面啦&#xff01; 我們將繼續堅持&#xff0c;月月有大招&#xff0c;迭代不停歇&#xff0c;快來更新禪道&#xff0c;體驗全新的項目管理工具吧~ ?

【PDF PicKiller】PDF批量刪除固定位置圖片工具,默認解密,可去一般圖、背景圖、水印圖!

PDF批量刪除固定位置圖片工具 PDF PicKiller <center>PDF PicKiller [Download](https://github.com/Peaceful-World-X/PDF-PicKiller)&#x1f929; 工具介紹&#x1f973; 主要功能&#x1f92a; 軟件使用&#x1f92a; 參數解釋&#x1f92a; 關鍵代碼&#x1f929; 項…

kubeadm安裝k8s

1、環境準備 1.1、升級系統內核 參考另一篇文章&#xff1a;https://blog.csdn.net/u012533920/article/details/148457715?spm1011.2415.3001.5331 1.2、設置Hostname cat <<EOF > /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhos…

Vue基礎(14)_列表過濾、列表排序

Array.prototype.filter()【ES5】 filter() 方法創建給定數組一部分的淺拷貝&#xff0c;其包含通過所提供函數實現的測試的所有元素。 語法&#xff1a; filter(callbackFn) filter(callbackFn, thisArg) 參數&#xff1a; callbackFn(回調函數)&#xff1a;為數組中的每個元…

ComfyUI 中如何使用 Depth ControlNet SD1.5

目錄 SD1.5 Depth ControlNet 簡介 Depth ControlNet 主要特點 SD1.5 Depth ControlNet工作流準備工作 1. 安裝必要插件 方式一:使用 ComfyUI Manager(推薦) 方式二:通過 git 安裝必要插件 方式三:手動安裝(不推薦) 2.1 下載工作流所需模型 2.2 模型存放位置 SD…

IoT/HCIP實驗-3/LiteOS操作系統內核實驗(任務、內存、信號量、CMSIS..)

文章目錄 概述HelloWorld 工程C/C配置編譯器主配置Makefile腳本燒錄器主配置運行結果程序調用棧 任務管理實驗實驗結果osal 系統適配層osal_task_create 其他實驗實驗源碼內存管理實驗互斥鎖實驗信號量實驗 CMISIS接口實驗還是得JlINKCMSIS 簡介LiteOS->CMSIS任務間消息交互…

mysql的分頁場景下,頁數越大查詢速度越慢的解決方法

一 問題描述 select * from table limit 0,10掃描滿足條件的10行&#xff0c;返回10行&#xff0c; 但當limit 99989,10的時候數據讀取就很慢,limit 99989,10的意思掃描滿足條件的99999行&#xff0c;扔掉前面的99989行&#xff0c;返回最后的10行&#xff0c;這樣速度就會很慢…