当前位置:   article > 正文

Harmony鸿蒙系统身份证阅读器SDK二次开发demo_鸿蒙sdk开发代码安全

鸿蒙sdk开发代码安全

鸿蒙hap非调试模式无法直接安装到开发板中,需要udid签名才能安装。
上架到商城之后就可以任意设备安装使用。

SDK需要厂商提前预置USB设备读写权限,如果您的鸿蒙设备是定制设备,遇到找不到设备时,请询问设备定制方是否开放了USB接口的系统层权限。

ArkTS是HarmonyOS应用开发语言。它在保持TypeScript(简称TS)基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。同时,提供了声明式UI、状态管理等相应的能力,让开发者可以以更简洁、更自然的方式开发高性能应用。 [2]
 

2.2身份证

class IDCardInfo {

  public  result: number /*返回值*/

  public  name: string /*中文姓名*/

  public  ENfullname: string  /*英文姓名*/

  public  ENfullnameOther: string /*英文姓名备用*/

  public  changCount: string /*签发数次*/

  public  sex: string /*性别*/

  public  people: string /*民族*/

  public  birthday: string /*出生日期(YYYYMMDD)*/

  public  address: string  /*地址*/

  public  number: string   /*证件号码*/

  public  organs: string  /*发证机关(或外国人永久居住正-当次申请受理机关)*/

  public  signdate: string/*发证日期(YYYYMMDD)*/

  public  validterm: string/*有效日期(YYYYMMDD)*/

  public  certType: string /*卡片类型,0:居民身份证,I:外国人,J:港澳台,Y:新版外国人*/

  public  certVersion: string /*证件版本*/

  public  oldNumber: string /*既往版本永居证号码*/

  public  nationality: string  /*国籍*/

  public  passNu: string /*通行证号*/

  public  signCount: string /*签发数次*/

  public  imgBase64: string /*读取二代证电子信息时保存照片数据信息Base64格式*/

  public  figData: string /*指纹信息*/

2.2.1 Donsee_ReadIDCard读取身份证信息

定义:读取身份证信息

原型:IDCardInfo  Donsee_ReadIDCard (int nType);

参数:

nType: 设置身份证读卡类型:0,文本信息;1,文本+照片;2,文本+照片+指纹

返回值:IDCardInfo对象

IDCardInfo.result   0: 读取身份证信息成功;

IDCardInfo.result 非0: 读取身份证信息失败,参考状态码

以下是ArkTS代码:

  1. import CommonContants from '../common/CommonContants';
  2. import DonseeDevice from '@ohos/DonseeDevice/src/main/ets/model/DonseeDevice';
  3. import { IDCardInfor } from '@ohos/DonseeDevice/src/main/ets/model/IDCardInfor';
  4. /**
  5. * Harmony鸿蒙系统SDK开发包
  6. * EST-100多功能智能卡读写器
  7. * date:2023-11-15
  8. * 广东东信智能
  9. */
  10. @Component
  11. export struct IDCardComponent {
  12. @State tvResult: string = '';
  13. @State imgBase64: string = '';
  14. @State imageVisible: Visibility = Visibility.None;
  15. @State nType : number = 1;//0,文本信息;1,文本+照片;2,文本+照片+指纹
  16. @Provide showSelector: boolean = false // 是否展开下拉菜单
  17. @Provide modesData: any = [{id: 1,name: '文本信息'},{id: 2,name: '文本照片'},{id: 3,name: '文本照片指纹'}]
  18. @Provide modeId: number = 0 // 当前选中项id
  19. build() {
  20. Column() {
  21. Row() {
  22. Column() {
  23. Image(this.imgBase64)
  24. .visibility(this.imageVisible)
  25. .width(51)
  26. .height(63)
  27. .objectFit(ImageFit.Contain)
  28. Text(this.tvResult)
  29. .fontSize(10)
  30. .margin({ top: 2 })
  31. }
  32. .layoutWeight(1)
  33. .margin({left:10})
  34. .alignItems(HorizontalAlign.Start)
  35. Column() {
  36. Column() {
  37. Row() {
  38. Radio({ value: "文本", group: "1234" })
  39. .checked(this.nType === 0 ? true : false)
  40. .height(20)
  41. .width(20)
  42. .onClick(() => {
  43. this.nType = 0;
  44. })
  45. Text('文本')
  46. }.margin({ left: 10 })
  47. Row() {
  48. Radio({ value: "文本照片", group: "1234" })
  49. .checked(this.nType === 1 ? true : false)
  50. .height(20)
  51. .width(20)
  52. .onClick(() => {
  53. this.nType = 1;
  54. console.info("Radio onClick")
  55. })
  56. Text('文本照片')
  57. }.margin({ left: 10 })
  58. Row() {
  59. Radio({ value: "文本照片指纹", group: "1234" })
  60. .checked(this.nType === 2 ? true : false)
  61. .height(20)
  62. .width(20)
  63. .onClick(() => {
  64. this.nType = 2;
  65. console.info("Radio onClick")
  66. })
  67. Text('文本照片指纹')
  68. }.margin({ left: 10 })
  69. }.justifyContent(FlexAlign.Start)
  70. .alignItems(HorizontalAlign.Start)
  71. Button("读身份证")
  72. .fontSize($r('app.float.submit_button_font_size'))
  73. .fontWeight(CommonContants.FONT_WEIGHT)
  74. .height(30)
  75. .width(120)
  76. .onClick(() => {
  77. let idInfo:IDCardInfor = DonseeDevice.Donsee_ReadIDCard(this.nType)
  78. // HexUtil.bytesToHex()
  79. // if(obj.result>0){
  80. // console.info("version: " + obj.version)
  81. // }
  82. // let[result,base64] = this.donseeDevice.Donsee_ReadIDCard()
  83. console.info("result: " + idInfo.result)
  84. if(idInfo.result==0){
  85. // console.info("obj.base64: " + obj.base64)
  86. // console.info("imgBase64.length1: " + this.imgBase64.length)
  87. // console.log(("中文姓名:"), idInfo.name);
  88. // console.log(("英文姓名:"), idInfo.ENfullname);
  89. // console.log(("性 别:"), idInfo.sex);
  90. // console.log(("民 族:"), idInfo.people);
  91. // console.log(("出身日期:"), idInfo.birthday);
  92. // console.log(("家庭住址:"), idInfo.address);
  93. // console.log(("身份证号:"), idInfo.number);
  94. // console.log(("签发单位:"), idInfo.organs);
  95. // console.log(("开始有效期限:"), idInfo.signdate);
  96. // console.log(("结束有效期限:"), idInfo.validterm);
  97. // console.log(("证件类别:"), idInfo.certType);
  98. // console.log(("证件版本:"), idInfo.certVersion);
  99. // console.log(("通行证号:"), idInfo.passNu);
  100. // console.log(("签发数次:"), idInfo.signCount);
  101. if(idInfo.ENfullnameOther.length>0){
  102. idInfo.ENfullname += idInfo.ENfullnameOther
  103. }
  104. this.tvResult =
  105. "中文姓名:"+ idInfo.name+" "
  106. +"英文姓名:"+ idInfo.ENfullname+"\n"
  107. +"性 别:"+ idInfo.sex+" "
  108. +"民 族:"+ idInfo.people+" "
  109. +"出生日期:"+ idInfo.birthday+"\n"
  110. +"家庭住址:"+ idInfo.address+"\n"
  111. +"身份证号:"+ idInfo.number+"\n"
  112. +"签发单位:"+ idInfo.organs+" "
  113. +"国籍代码:"+ idInfo.nationality+"\n"
  114. +"有效期限:"+ idInfo.signdate+" - "+ idInfo.validterm+"\n"
  115. +"证件类别:"+ idInfo.certType+" "
  116. +"证件版本:"+ idInfo.certVersion+"\n"
  117. +"通行证号:"+ idInfo.passNu+" "
  118. +"换证次数:"+ idInfo.changCount+"\n"
  119. +"签发数次:"+ idInfo.signCount+" "
  120. +"既往版本:"+ idInfo.oldNumber+"\n"
  121. +"指纹:"+ idInfo.figData+"\n"
  122. if(idInfo.imgBase64.length>0){
  123. this.imgBase64 = 'data:image/png;base64,'+idInfo.imgBase64
  124. this.imageVisible = Visibility.Visible
  125. }else{
  126. this.imageVisible = Visibility.None
  127. }
  128. }else{
  129. this.imgBase64 = ''
  130. this.tvResult = "读取失败:"+ idInfo.result
  131. }
  132. }).margin({top:10})
  133. Button("身份证ID")
  134. .fontSize($r('app.float.submit_button_font_size'))
  135. .fontWeight(CommonContants.FONT_WEIGHT)
  136. .height(30)
  137. .width(120)
  138. .onClick(() => {
  139. let[result,data] = DonseeDevice.Donsee_ReadIDCardUid()
  140. if(result == 0){
  141. this.tvResult = "Uid:"+ data
  142. }else{
  143. this.tvResult = "Uid读取失败:"+ result
  144. }
  145. }).margin({top:10})
  146. }.justifyContent(FlexAlign.End)
  147. .margin({right:10})
  148. }.justifyContent(FlexAlign.Start)
  149. .width(CommonContants.FULL_PARENT)
  150. }.justifyContent(FlexAlign.Start)
  151. .backgroundColor($r('app.color.card_background'))
  152. .width(CommonContants.FULL_PARENT)
  153. .height(CommonContants.FULL_PARENT)
  154. }
  155. // 获取选中项的内容
  156. getSelectedText() {
  157. const selectedItem = this.modesData.find(item => {
  158. console.info('this.modeId==='+this.modeId)
  159. console.info('item.id==='+item.id)
  160. return item.id == this.modeId
  161. })
  162. if (selectedItem) {
  163. console.info('selectedItem.name==='+selectedItem.name)
  164. return selectedItem.name
  165. }
  166. return ''
  167. }
  168. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/330378?site
推荐阅读
相关标签
  

闽ICP备14008679号