|
|
@@ -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}"
|
|
|
}
|
|
|
|