diff --git a/bus-qrcode/build.gradle b/bus-qrcode/build.gradle
index 0817cb6..8559f1d 100644
--- a/bus-qrcode/build.gradle
+++ b/bus-qrcode/build.gradle
@@ -7,7 +7,7 @@
 
 group = rootProject.group
 
-def sdkVersion = '1.3.5'
+def sdkVersion = '1.3.6'
 sourceCompatibility = 1.8
 targetCompatibility = 1.8
 
diff --git a/bus-qrcode/src/main/java/com/supwisdom/dlpay/busqrcode/QrCode.java b/bus-qrcode/src/main/java/com/supwisdom/dlpay/busqrcode/QrCode.java
index 93070d0..e920f0e 100644
--- a/bus-qrcode/src/main/java/com/supwisdom/dlpay/busqrcode/QrCode.java
+++ b/bus-qrcode/src/main/java/com/supwisdom/dlpay/busqrcode/QrCode.java
@@ -13,7 +13,6 @@
 import java.time.Duration;
 import java.time.Instant;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 
 import static com.supwisdom.dlpay.busqrcode.BinUtil.*;
 import static com.supwisdom.dlpay.busqrcode.CryptoUtil.*;
@@ -37,7 +36,7 @@
     qrDataKeys.add(FIELD_CARDTYPE);
     qrDataKeys.add(FIELD_TOTP);
     qrDataKeys.add(FIELD_RANDOM);
-//    qrDataKeys.add(FIELD_SIGN);
+    qrDataKeys.add(FIELD_SIGN);
   }
 
   private Builder qrBuilder;
@@ -271,18 +270,17 @@
     }
 
     final byte[] sign = sha256(byteConcat(qrData.getBytes(), factor));
-//    final byte[] signT = new byte[20];
-//    System.arraycopy(sign, 0, signT, 0, 20); //取前20位
-    final byte[] encDataPlain = byteConcat(qrData.getBytes(), DELIMITER.getBytes(), sign);
-//    final byte[] encData = aesEncryptCFB(qrBuilder.rootKey, encDataPlain, qrBuilder.iv);
-    final byte[] encData = aesEncryptCFB(qrBuilder.rootKey, qrData.getBytes(), qrBuilder.iv);
+    final byte[] signT = new byte[8];
+    System.arraycopy(sign, 0, signT, 0, 8); //取前8位
+    final byte[] encDataPlain = byteConcat(qrData.getBytes(), DELIMITER.getBytes(), signT);
+    final byte[] encData = aesEncryptCFB(qrBuilder.rootKey, encDataPlain, qrBuilder.iv);
     final String code = encodeBase64(encData);
     String result = code;
     if (qrBuilder.prefix != null) {
       result = qrBuilder.prefix + code;
     }
     if (qrBuilder.debug) {
-      System.out.println("hex sign=[" + encodeHex(sign) + "]");
+      System.out.println("hex sign=[" + encodeHex(signT) + "]");
       System.out.println("hex encDataPlain=[" + encodeHex(encData) + "]");
       System.out.println("QR code=[" + result + "]");
       System.out.println("======================  Build QR Code End  =================================");
@@ -321,8 +319,8 @@
     if (qrBuilder.debug) {
       System.out.println("encDataPlain=[" + encData + "]");
     }
-    final String[] fields = encData.split(DELIMITER, 5);
-    if (fields.length < 5) {
+    final String[] fields = encData.split(DELIMITER, 6);
+    if (fields.length < 6) {
       throw new RuntimeException("二维码数据异常！");
     }
     Map<String, String> result = new HashMap<>();
@@ -340,16 +338,16 @@
     final String uid = result.get(FIELD_UID);
     final byte[] factor = getSignFactor(uid);
     final byte[] calcSign = sha256(byteConcat(qrData.getBytes(), factor));
-//    final byte[] signT = new byte[20];
-//    System.arraycopy(calcSign, 0, signT, 0, 20); //取前20位
+    final byte[] signT = new byte[8];
+    System.arraycopy(calcSign, 0, signT, 0, 8); //取前8位
     if (qrBuilder.debug) {
-//      System.out.println("calcSign=[" + new String(calcSign) + "]");
+      System.out.println("calcSign=[" + new String(signT) + "]");
       System.out.println("    sign=[" + result.get(FIELD_SIGN) + "]");
       System.out.println("======================  Decode QR Code End  =================================");
     }
-//    if (!new String(signT).equalsIgnoreCase(result.get(FIELD_SIGN))) {
-//      throw new RuntimeException("二维码验证错误！");
-//    }
+    if (!new String(signT).equalsIgnoreCase(result.get(FIELD_SIGN))) {
+      throw new RuntimeException("二维码验证错误！");
+    }
 
     return result;
   }
diff --git a/payapi/build.gradle b/payapi/build.gradle
index e029765..d144174 100644
--- a/payapi/build.gradle
+++ b/payapi/build.gradle
@@ -125,7 +125,7 @@
     implementation group: 'com.alipay.sdk', name: 'alipay-sdk-java', version: '3.7.110.ALL'
 
     /*大理二维码jar*/
-    implementation 'com.supwisdom:dlsmk-qrcode:1.3.5'
+    implementation 'com.supwisdom:dlsmk-qrcode:1.3.6'
 
     annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
     annotationProcessor 'org.projectlombok:lombok:1.18.8'
