生成随机字符
本文最后更新于 467 天前,其中的信息可能已经有所发展或是发生改变。

1. 随机MAC地址

# 创建 StringBuilder 对象,用于拼接结果
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;->()V
# 创建 Random 对象
new-instance v1, Ljava/util/Random;
invoke-direct {v1}, Ljava/util/Random;->()V
const/4 v2, 0x6 # 要生成的组数 (6 组)
const/16 v9, 0x10
const-string v3, “0123456789ABCDEF” # 16 进制字符集
:loop_start
if-lez v2, :loop_end # 如果已经生成了 6 组,跳出循环
# 生成两位 16 进制数的第一个字符
invoke-virtual {v1, v9}, Ljava/util/Random;->nextInt(I)I
move-result v4
invoke-virtual {v3, v4}, Ljava/lang/String;->charAt(I)C
move-result v5
invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
# 生成两位 16 进制数的第二个字符
invoke-virtual {v1, v9}, Ljava/util/Random;->nextInt(I)I
move-result v6
invoke-virtual {v3, v6}, Ljava/lang/String;->charAt(I)C
move-result v7
invoke-virtual {v0, v7}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
# 判断是否要添加冒号
add-int/lit8 v2, v2, -0x1 # 递减计数器
if-lez v2, :loop_start # 如果是最后一组,不添加冒号
const/16 v8, 0x3a # ASCII ‘:’ (冒号)
invoke-virtual {v0, v8}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
goto :loop_start # 继续下一组
:loop_end
# 将 StringBuilder 转换为 String 并返回
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v9
return-object v9

2. 随机8位包含数字大小写字母

.method public static generateRandomString()Ljava/lang/String;
.locals 8

const/4 v0, 0x8 # 目标字符串长度:8

# 定义字符集合
const-string v1, “abcdefghijklmnopqrstuvwxyz0123456789”

# 创建 StringBuilder 来存储结果字符串
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2, v0}, Ljava/lang/StringBuilder;->(I)V

# 获取字符集合的长度
invoke-virtual {v1}, Ljava/lang/String;->length()I
move-result v3

new-instance v4, Ljava/util/Random;
invoke-direct {v4}, Ljava/util/Random;->()V

:loop_start
if-lez v0, :loop_end

# 随机选择字符集合中的一个字符
invoke-virtual {v4, v3}, Ljava/util/Random;->nextInt(I)I
move-result v5

invoke-virtual {v1, v5}, Ljava/lang/String;->charAt(I)C
move-result v6

# 将字符添加到 StringBuilder
invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;

# 递减计数器
add-int/lit8 v0, v0, -0x1
goto :loop_start

:loop_end
# 将 StringBuilder 转换为 String
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v7

# 返回生成的字符串
return-object v7
.end method

3. UUID

this.mWho = UUID.randomUUID().toString();

invoke-static {}, Ljava/util/UUID;->randomUUID()Ljava/util/UUID;
move-result-object v0
invoke-virtual {v0}, Ljava/util/UUID;->toString()Ljava/lang/String;
move-result-object v0
​iput-object v0, p0, Landroidx/fragment/app/Fragment;->mWho:Ljava/lang/String;

4. 生成android_id / 16位二进制数字符串

# 创建一个 StringBuilder 实例,用于构建最终的字符串
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

# 创建一个 Random 实例,用于生成随机数
new-instance v1, Ljava/util/Random;
invoke-direct {v1}, Ljava/util/Random;-><init>()V

# 初始化 v2 为 8,表示需要生成8对字符(共16个字符)
const/16 v2, 0x8

# 初始化 v8 为 16,表示字符集 “0123456789abcdef” 的长度
const/16 v8, 0x10

# 初始化包含十六进制字符的字符串 “0123456789abcdef”
const-string v3, “0123456789abcdef”

# 循环开始:继续循环直到 v2 减至 0
:goto_10
if-lez v2, :cond_2b # 如果 v2 <= 0,跳转到 :cond_2b 结束循环

# 生成一个0到15之间的随机整数(用于选择十六进制字符)
invoke-virtual {v1, v8}, Ljava/util/Random;->nextInt(I)I
move-result v4 # 将结果存储到 v4 中

# 从字符串 v3 中获取对应索引的字符
invoke-virtual {v3, v4}, Ljava/lang/String;->charAt(I)C
move-result v5 # 将字符存储到 v5 中

# 将字符 v5 附加到 StringBuilder v0 中
invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;

# 再次生成一个0到15之间的随机整数
invoke-virtual {v1, v8}, Ljava/util/Random;->nextInt(I)I
move-result v6 # 将结果存储到 v6 中

# 从字符串 v3 中获取对应索引的字符
invoke-virtual {v3, v6}, Ljava/lang/String;->charAt(I)C
move-result v7 # 将字符存储到 v7 中

# 将字符 v7 附加到 StringBuilder v0 中
invoke-virtual {v0, v7}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;

# 将 v2 减 1,继续下一轮循环
add-int/lit16 v2, v2, -0x1
goto :goto_10 # 跳转到循环起点 :goto_10

# 循环结束:v2 为 0 时执行此部分
:cond_2b
# 将 StringBuilder v0 转换为 String
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v9 # 将生成的字符串存储到 v9 中

# 设置日志标签为 “taaaaag”
const-string v8, “taaaaag”

# 将生成的字符串 v9 输出到日志中(verbose 级别)
invoke-static {v8, v9}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇