From 6a5879320dfac43155d024814a0a4d794a612696 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 21 八月 2024 13:52:14 +0800
Subject: [PATCH] 齐河联网版程序除补卡相关逻辑

---
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java |   73 ++++++++++++++++++++++++++++++++++++
 1 files changed, 73 insertions(+), 0 deletions(-)

diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
index 4abdceb..3517fcb 100644
--- a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
@@ -241,6 +241,79 @@
     }
 
     /**
+     * 鍒濆鍖栧崱
+     *
+     * @return
+     */
+    public boolean initCard() {
+        try {
+            MifareClassic mfc = MifareClassic.get(tag);
+            if (null != mfc) {
+                try {
+                    //杩炴帴NFC
+                    mfc.connect();
+                    //鑾峰彇鎵囧尯鏁伴噺
+                    int count = mfc.getSectorCount();
+                    byte[] data = new byte[16];
+                    String initData = "FFFFFFFFFFFFFF078069FFFFFFFFFFFF";
+                    byte[] initDataBytes = HexUtil.hexToByteArray(initData);
+                    for (int sector = 0; sector < count; sector++) {
+                        //楠岃瘉鎵囧尯瀵嗙爜
+                        boolean isOpen = mfc.authenticateSectorWithKeyA(sector, defauleKey);
+                        if (!isOpen) {
+                            isOpen = mfc.authenticateSectorWithKeyA(sector, companyKey2);
+                            if (isOpen){
+                                mfc.authenticateSectorWithKeyB(sector, companyKey2);
+                            }
+                        }
+                        if (!isOpen) {
+                            isOpen = mfc.authenticateSectorWithKeyA(sector, companyKey);
+                            if (isOpen){
+                                mfc.authenticateSectorWithKeyB(sector, companyKey);
+                            }
+                        }
+                        if (isOpen) {
+                            //鑾峰彇鍐欑殑鎵囧尯鐨勫潡鐨勬暟閲�
+                            int blockCount = mfc.getBlockCountInSector(sector);
+                            int blockIndex = mfc.sectorToBlock(sector);
+                            for (int block = 0; block < blockCount ; block++) {
+                                // 璺宠繃绗� 0 鎵囧尯鐨勭 0 鍧�
+                                if (sector == 0 && block == 0) {
+                                    blockIndex++;
+                                    continue;
+                                }
+
+                                if (block < 3) {
+                                    mfc.writeBlock(blockIndex, data);
+                                } else {
+                                    mfc.writeBlock(blockIndex, initDataBytes);
+                                }
+                                //鍐欏崱
+
+                                blockIndex++;
+                            }
+                        }
+                    }
+                    return true;
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    return false;
+                } finally {
+                    try {
+                        mfc.close();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+        return false;
+    }
+
+    /**
      * 杩斿洖鐩戝惉绫�
      */
     public interface NFCCallback {

--
Gitblit v1.8.0