Explorar o código

feat: 字符串匿名化

DoggyZhang hai 2 días
pai
achega
fc6b865c4c

+ 1 - 1
frame/bom/build.gradle

@@ -6,7 +6,7 @@ plugins {
 ext {
     GROUP_ID = 'com.gami.android'
     ARTIFACT_ID = 'frame-bom'
-    VERSION = '1.0.1'
+    VERSION = '1.0.2'
 }
 
 dependencies {

+ 1 - 1
frame/util/build.gradle

@@ -7,7 +7,7 @@ plugins {
 ext {
     GROUP_ID = 'com.gami.android'
     ARTIFACT_ID = 'frame-util'
-    VERSION = '1.0.0'
+    VERSION = '1.0.1'
 }
 
 if (project.FRAME_DEBUG != "true") {

+ 16 - 15
frame/util/src/main/java/com/adealink/frame/ext/StringExt.kt

@@ -1,8 +1,8 @@
 package com.adealink.frame.ext
 
 import com.adealink.frame.util.AppUtil
-import java.lang.Integer.max
-import java.lang.StringBuilder
+import kotlin.math.roundToInt
+import kotlin.math.max
 
 private const val PREFIX_RAW = "android.resource://"
 
@@ -12,28 +12,29 @@ fun Int.toRawUrl(): String {
 
 /**
  * 字符串脱敏
- * 先识别名称的字符数量,前25%可见,后25%可见,中间的50%隐藏
+ * 先识别名称的字符数量, 中间隐藏
+ * @param hiddenStart 前几个可见
+ * @param hiddenLast 后几个可见
  * a => a***
- * ab => a***
+ * ab => a***b
  * abc => a***c
  * abcd => a***d
  * abcde => a***e
  * abcdef => ab***f
  */
-fun String.desensitize(maskSrt: String = "***"): String {
+fun String.desensitize(maskSrt: String = "***", hiddenStart: Int = 1, hiddenLast: Int = 1): String {
     if (isEmpty()) {
         return ""
     }
-    //前25%内容
-    val leftEnd = max(length / 4, 1)
-    val left = subSequence(0, leftEnd)
-    //后25%内容
-    val rightStart = max(length / 4 * 3, 1)
-    val right = if (rightStart in (leftEnd + 1) until length) {
-        subSequence(rightStart, length)
-    } else {
-        ""
-    }
+    
+    val calcStart = max(hiddenStart, 1)
+    val leftLen = calcStart.coerceAtMost(length)
+    val left = substring(0, leftLen)
+    
+    val calcLast = max(hiddenLast, 1)
+    val rightLen = calcLast.coerceAtMost(length - leftLen)
+    val right = if (rightLen > 0) substring(length - rightLen, length) else ""
+
     return "${left}${maskSrt}${right}"
 }