gpt4 book ai didi

java - 特定格式的数据脱敏

转载 作者:行者123 更新时间:2023-12-02 09:27:23 25 4
gpt4 key购买 nike

给定一个字符串

"62591000756"

如何对字符串执行屏蔽,使前 6 个字符和最后 2 个字符以纯文本显示,其余字符替换为“X”?例如,

"625910XXX56"

如何在 java 代码和 oracle sql 中完成这种屏蔽?在这种情况下有没有可能使用正则表达式? (字符数不限于上例所示的11个)

最佳答案

另一种使用替换的方法,在java中都可用

String text = "62591000756";
String patched = text.substring(0, 6) + "XXX" + text.substring(9);

and sql 。它是 ansi-sql 的一部分,因此它不依赖于您的数据库品牌。注意,sql使用从1开始索引,java是从0开始,java使用end-index,sql是子字符串的长度。

字符串连接(“+”)是在 SQL 中使用 CONCAT(也在 Ansi 标准中)完成的,让我们看看......

SELECT CONCAT(SUBSTRING(Fieldname, 1, 6), "XXX", SUBSTRING(Fieldname, 10, 2)) AS PATCHED FROM
Tablename;

然后是java正则表达式版本:

"62591000756".replaceAll("([0-9]{6})([0-9]{3})([0-9]{2})", "$1XXX$2")

至于sql版本,取决于您的数据库。有些会用正则表达式替换,oracle does .

如果您想通用化它以允许在任何索引处使用任何长度的掩码,则可以使用正则表达式方法:只需为正则表达式中的数字设置自定义值 ({6}{3}{2})类似 String.format("([0-9]{%d})([0-9]{%d})([0-9]{%d})", lenghtPrefix, lengthMask, lengthPostfix )。请注意,这样做会引入很多极端情况,例如掩码的索引和长度必须在原始字符串的范围内。

我确信您可以编写一个 sql 来处理这个问题,但它可能会变得复杂,或者,由于您使用的是 Oracle,您可以为该作业编写一个 plsql 函数,然后可以在 sql 中使用该函数。 Oracle 还允许嵌入 java,但从未尝试过。

关于java - 特定格式的数据脱敏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58244925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com