字符串随机生成工具(开源)-Kimen(奇门)

这篇具有很好参考价值的文章主要介绍了字符串随机生成工具(开源)-Kimen(奇门)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        由于最近笔者在开发数据脱敏相关功能,其中一类脱敏需求为能够按照指定的格式随机生成一个字符串来代替原有信息,数据看起来格式需要与原数据相同,如:电话号码,身份证号以及邮箱等。在网上搜索了下,发现没有特别合适的开源工具,于是秉承着没有开源就自己写的宗旨。笔者开发了一个小的开源工具--Kimen(奇门)。这个工具可以按照给定的表达式随机生成字符串,简单易用。项目代码不多,但用到了些编程技巧,如:antlr的使用。但更多是对解决这个字符串随机生成问题的设计思考。如果感兴趣的朋友多的话,文章下留言,笔者将在后续整理出Kimen从构思到开发的过程。好了,闲话少叙,介绍Kimen(奇门)。

        KiMen(奇门)是一款基于表达式随机生成字符串的开源工具。可用于数据脱敏或系统测试时数据的仿真生成,还可用作随机密码生成的场景。其表达式借鉴了正则表达式的部分表示方式,如:

[a-zA-Z]{4}'1234'[a-zA-Z]{4}

        该表达式由三部分组成,分别是:[a-zA-Z]{4}、'1234'和[a-zA-Z]{4}。[a-zA-Z]{4}描述了一个可变字符串,该字符串长度为4,可用字符范围为'a'到'z'和'A'到'Z';'1234'描述了一个常量字符串,该字符串在进行字符串随机生成时保持不变。以下几个示例为由该表达式随机生成的字符串:

oOVj1234sCin
ygfj1234Zcdj
zpJM1234Zjmp
......

KiMen表达式

        Kimen表达式主要由两类任意多个基本的子表达式组成,格式如下:

(VariantStrExpr|ConstantStrExpr)+
VariantStrExpr

        表示可变字符串。Kimen将根据该表达式随机生成字符串。其格式如下:

'['charset']''{'min[,max]'}'

        [charset]中描述了进行字符串随机生成时可用的字符。可用字符集两端使用'[]'包围,其字符描述包括以下三种格式:

  1. 字符:如:[abcd],abcd四个字符间不需要任何分隔符。

  2. 字符区间:[0-9],0-9表示从数字0到数字9

  3. 字符字典:[\a],\a表示一个名字为a的字典,Kimen中所有的字符集字典都以一个字符命名。其可用的命名字符的范围没有限制,理论上你可以使用除[\|'|"]号外的任何一个字符为字典命名。字符字典主要用于可选字符范围较大,在表达式中展开不方便的情况。字符字典,可通过Kimen的开发接口进行注册,字符串生成器会动态装载字符字典。字符字典可以让Kimen表达式看起来更清爽一些。'\'字符为转义字符,当碰到该字符时表示,其后面的字符是字典名。需要额外注意的是,当需要在表达式中使用'\'字符时,需要用两个'\\'字符来表达。

        {min,max}中描述了可变字符串的长度,min表示随机生成字符串时的最小长度; max表示随机生成字符串时的最大长度,max可选。当只有min值时,表示按照固定长度生成字符串。

ConstantStrExpr

        表示常量字符串。常量字符串用于描述字符串随机生成时,信息相对固定的部分。其表达格式如下:

'str'|"str"

        如表达式所示,其有两种常量字符串格式:

        'str'使用[']号做为常量字符串的包围符,其内部可以是除[']号外的任意字符,当需要在常量字符串中使用'''字符时,可使用[\']或[''] (两个连续单引号)两种格式表达。

        "str"使用["]号做为常量字符串的包围符,其内部可以是除["]号外的任意字符,当需要在常量字符串中使用["]字符时,可使用[\"]表达。

KiMen代码示例

随机变长字符串示例
    // 随机字符串表达式
    String expr = "[a-zA-Z]{4}'1234'[a-zA-Z]{4,8}";
    KimenBuilder kimenBuilder = new KimenBuilder();
    // 构造字符串生成器
    StringGenerator stringGenerator = kimenBuilder.buildKimen(expr);
    // 循环输出生成的字符串
    for (int i = 0; i < 10; i++) {
      System.out.println(stringGenerator.generate());
    }

生成结果

SKDZ1234ODPC
NUvi1234dkYFvaJ
fAQJ1234KXJsbR
evZz1234ZUIvaLm
uHpi1234UPHlZH
AXQB1234KfUCwd
PuoR1234BeRBrR
NudR1234RSqoZM
SYpf1234wxEumY
slZK1234RPviU
字符字典示例
    // 随机字符串表达式
    String expr = "[a-zA-Z]{4}\"1234\"[\\a\\d]{4}";
    KimenBuilder kimenBuilder = new KimenBuilder();
    // 设置字符字典a
    kimenBuilder.addCharSet('a',"bcd");
    // 设置字符字典d
    kimenBuilder.addCharSet('d',"123");
    // 构造字符串生成器
    StringGenerator stringGenerator = kimenBuilder.buildKimen(expr);
    // 循环输出生成的字符串
    for (int i = 0; i < 10; i++) {
      System.out.println(stringGenerator.generate());
    }

生成结果文章来源地址https://www.toymoban.com/news/detail-826236.html

rVQk1234dc33
HReP1234dcd1
dEyi12342dd2
hmaT1234322b
irsl12343dd2
vNDx1234c3dd
pfeW1234dbc1
rvlV1234211b
vEzz12341cc3
ndWD123412bd

Maven坐标

<dependency>
    <groupId>org.datayoo.kimen</groupId>
    <artifactId>kimen</artifactId>
    <version>1.0.0</version>
</dependency>

到了这里,关于字符串随机生成工具(开源)-Kimen(奇门)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL、Oracle 生成随机ID、随机数、随机字符串

    UUID():是由128位的数字组成的全局唯一标识符。每次都生成一个新的随机数。 它通常以32个十六进制数的形式表示,分为5个部分,以连字符分隔。 UUID的长度是36个字符,包括32个十六进制数字和4个连字符。 UUID的标准格式是由 8-4-4-4-12 个十六进制数字组成的,其中每个部分的

    2024年01月16日
    浏览(56)
  • C# 生成指定长度的随机字符串

     /// summary         /// 生成指定长度的随机字符串         /// /summary         /// param name=\\\"intLength\\\"随机字符串长度/param         /// param name=\\\"booNumber\\\"生成的字符串中是否包含数字/param         /// param name=\\\"booSign\\\"生成的字符串中是否包含符号/param         /// param name=\\\"booSmall

    2024年01月19日
    浏览(56)
  • QT生成固定长度的随机字符串

    最近项目中有一个需要使用QT生成固定长度随机字符串的需求,需求也很简单,就是生成一个n位的仅包含0-9以及大写字母的字符串,因为这也是第一次使用QT自身的随机数,这里就做一下简单记录。 废话不多说,直接上代码。 View Code  这段代码逻辑也很简单,以当前的时间戳

    2024年03月13日
    浏览(60)
  • Java随机生成字符串的4种方式

    java.util.UUID 类可用于生成UUID, 它的static randomUUID方法返回一个32个字符的字符串。 注意randomUUID方法生成的字符串包含“-”。上面的示例通过使用空字符串替换了。 以上程序输出为: 下面的算法可以使用这种方法生成一个固定长度的随机字符串。 初始化一个空字符串以保存结

    2024年02月08日
    浏览(45)
  • 在 JavaScript 中生成随机字符串/字符

    我想要一个由从集合 [a-zA-Z0-9] 中随机挑选的字符组成的 5 个字符的字符串。 使用 JavaScript 执行此操作的最佳方法是什么? huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。 一个优秀的自由职业者,应该有对

    2024年02月16日
    浏览(46)
  • 【postman】随机字符串

    2024年01月19日
    浏览(40)
  • 在 Python 中生成随机字符串

    介绍生成随机字符串的几种方法:

    2024年02月15日
    浏览(48)
  • 如何将后端带过来的字符串通过‘,’号作为判断依据,分割字符串然后生成数组

    在实际开发工程中我们会遇到我们调用后端接口获取图片、文件、视频甚至选择的对象时,如果是这样的: 这种数据类型如果想渲染在html中的话就会很麻烦,我们可以通过\\\",\\\"号为切割点将它放入数组中,通过列表进行渲染 由于实际项目中的数据很多可能说起来会很乱,所以

    2024年01月20日
    浏览(51)
  • 使用ctcloss训练矩阵生成目标字符串

    首先我们需要明确 c t c l o s s ctcloss c t c l oss 是用来做什么的。比如说要生成的目标字符串长度为 l l l ,而这个字符串包含 s s s 个字符,字符串允许的最大长度为 L L L ,这里认为一个位置是一个时间步,就是一拍,记为 T T T 。 对于这个允许最大长度,需要做出一些解释,定

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包