我发现(通过测试)在没有状态保存的情况下,所有提到的方法都容易受到非常短周期的碰撞。在不多的测试运行中,相同的数字在 30 秒内被选中。
我认为使用mod
不保留状态的操作不能产生随机均匀分布(没有密码分析级别的发明)。
所以我试图找到简单的数字改组方案。
我将重用时间缩短到 10 分钟。
经过一番测试,我随机选择了以下公式:
V = (Minute % 10) * 1235 + Second * 79 + Millisecond * 982 + 1
这个公式正好生成 10 分钟。周期随机数序列。
(我没查,但看起来分布均匀)
对于我目前的需求,这种方法可以完成工作。
示例 Java 代码:
public void run() {
try {
while (true) {
Thread.sleep(1);
Date now = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(now);
int m = cal.get(Calendar.MINUTE);
int s = cal.get(Calendar.SECOND);
int ms = cal.get(Calendar.MILLISECOND);
String ts = String.format("%02d:%02d:%03d", m, s, ms);
int v = (m % 10) * 1235 + s * 79 + ms * 982 + 1;
String ret = String.format("%06d", v);
System.out.println(ts + "\t" + ret);
}
}
catch (Exception e) {
System.out.println(e);
}
}
样本输出:
MM:SS:M.S V
09:40:806 805768
09:40:807 806750
09:40:808 807732
09:40:809 808714
09:40:810 809696
09:40:811 810678
09:40:812 811660
09:40:813 812642
09:40:814 813624
09:40:815 814606
09:40:816 815588
09:40:817 816570
09:40:818 817552
09:40:819 818534
09:40:820 819516
09:40:821 820498
09:40:822 821480
09:40:823 822462
09:40:824 823444
09:40:825 824426
09:40:826 825408
09:40:827 826390
09:40:828 827372
09:40:829 828354
09:40:830 829336
09:40:831 830318
09:40:832 831300
09:40:833 832282
09:40:834 833264
09:40:835 834246
09:40:836 835228
09:40:837 836210
09:40:838 837192
09:40:839 838174
09:40:840 839156
09:40:841 840138
09:40:842 841120
09:40:843 842102
09:40:844 843084
09:40:845 844066
09:40:846 845048
09:40:847 846030
09:40:848 847012
09:40:849 847994
09:40:850 848976
09:40:851 849958
09:40:852 850940
09:40:853 851922
09:40:854 852904
09:40:855 853886
09:40:856 854868
09:40:857 855850
09:40:858 856832
09:40:859 857814
09:40:860 858796
09:40:861 859778
09:40:862 860760
09:40:863 861742
09:40:864 862724
09:40:865 863706
09:40:866 864688
09:40:867 865670
09:40:868 866652
09:40:869 867634
09:40:870 868616
09:40:871 869598
09:40:872 870580
09:40:873 871562
09:40:874 872544
09:40:875 873526
09:40:876 874508
09:40:877 875490
09:40:878 876472
09:40:879 877454
09:40:880 878436
09:40:881 879418
09:40:882 880400
09:40:883 881382
09:40:884 882364
09:40:885 883346
09:40:886 884328
09:40:887 885310
09:40:888 886292
09:40:889 887274
09:40:890 888256
09:40:891 889238
09:40:892 890220
09:40:893 891202
09:40:894 892184
09:40:895 893166
09:40:896 894148
09:40:897 895130
09:40:898 896112
09:40:899 897094
09:40:900 898076
09:40:901 899058
09:40:902 900040
09:40:903 901022
09:40:904 902004
09:40:905 902986
09:40:906 903968
09:40:907 904950
09:40:908 905932
09:40:909 906914
09:40:910 907896
09:40:911 908878
09:40:912 909860
09:40:913 910842
09:40:914 911824
09:40:915 912806
09:40:916 913788
09:40:917 914770
09:40:918 915752
09:40:919 916734
09:40:920 917716
09:40:921 918698
09:40:922 919680
09:40:923 920662
09:40:924 921644
09:40:925 922626
09:40:926 923608
09:40:927 924590
09:40:928 925572
09:40:929 926554
09:40:930 927536
09:40:931 928518
09:40:932 929500
09:40:933 930482
09:40:934 931464
09:40:935 932446
09:40:936 933428
09:40:937 934410
09:40:938 935392
09:40:939 936374
09:40:940 937356
09:40:941 938338
09:40:942 939320
09:40:943 940302
09:40:944 941284
09:40:945 942266
09:40:946 943248
09:40:947 944230
09:40:948 945212
09:40:949 946194
09:40:950 947176
09:40:951 948158
09:40:952 949140
09:40:953 950122
09:40:954 951104
09:40:955 952086
09:40:956 953068
09:40:957 954050
09:40:958 955032
09:40:959 956014
09:40:960 956996
09:40:961 957978
09:40:962 958960
09:40:963 959942
09:40:964 960924
09:40:965 961906
09:40:966 962888
09:40:967 963870
09:40:968 964852
09:40:969 965834
09:40:970 966816
09:40:971 967798
09:40:972 968780
09:40:973 969762
09:40:974 970744
09:40:975 971726
09:40:976 972708
09:40:977 973690
09:40:978 974672
09:40:979 975654
09:40:980 976636
09:40:981 977618
09:40:982 978600
09:40:983 979582
09:40:984 980564
09:40:985 981546
09:40:986 982528
09:40:987 983510
09:40:988 984492
09:40:989 985474
09:40:990 986456
09:40:991 987438
09:40:992 988420
09:40:993 989402
09:40:994 990384
09:40:995 991366
09:40:996 992348
09:40:997 993330
09:40:998 994312
09:40:999 995294
09:41:000 014355
09:41:001 015337
09:41:002 016319
09:41:003 017301
09:41:004 018283
09:41:005 019265
09:41:006 020247
09:41:007 021229
09:41:008 022211
09:41:009 023193
09:41:010 024175
09:41:011 025157
09:41:012 026139
09:41:013 027121
09:41:014 028103
09:41:015 029085
09:41:016 030067
09:41:017 031049
09:41:018 032031
09:41:019 033013
09:41:020 033995
09:41:021 034977
09:41:022 035959
09:41:023 036941
09:41:024 037923
09:41:025 038905
09:41:026 039887
09:41:027 040869
09:41:028 041851
09:41:029 042833
09:41:030 043815
09:41:031 044797
09:41:032 045779
09:41:033 046761
09:41:034 047743
09:41:035 048725
09:41:036 049707
09:41:037 050689
09:41:038 051671
09:41:039 052653
09:41:040 053635
09:41:041 054617
09:41:042 055599
09:41:043 056581
09:41:044 057563
09:41:045 058545
09:41:046 059527
09:41:047 060509
09:41:048 061491
09:41:049 062473
09:41:050 063455
09:41:051 064437
09:41:052 065419
09:41:053 066401
09:41:054 067383
09:41:055 068365
09:41:056 069347
09:41:057 070329
09:41:058 071311
09:41:059 072293
09:41:060 073275
09:41:061 074257
09:41:062 075239
09:41:063 076221
09:41:064 077203
09:41:065 078185
09:41:066 079167
09:41:067 080149
09:41:068 081131
09:41:069 082113
09:41:070 083095
09:41:071 084077
09:41:072 085059
09:41:073 086041
09:41:074 087023
09:41:075 088005
09:41:076 088987
09:41:077 089969
09:41:078 090951
09:41:079 091933
09:41:080 092915
09:41:081 093897
09:41:082 094879
09:41:083 095861
09:41:084 096843
09:41:085 097825
09:41:086 098807
09:41:087 099789
09:41:088 100771
09:41:089 101753
09:41:090 102735
09:41:091 103717
09:41:092 104699
09:41:093 105681
09:41:094 106663
09:41:095 107645
09:41:096 108627
09:41:097 109609
09:41:098 110591
09:41:099 111573
09:41:100 112555
09:41:101 113537
09:41:102 114519
09:41:103 115501
09:41:104 116483
09:41:105 117465
09:41:106 118447
09:41:107 119429
09:41:108 120411
09:41:109 121393
09:41:110 122375
09:41:111 123357
09:41:112 124339
09:41:113 125321
09:41:114 126303
09:41:115 127285
09:41:116 128267
09:41:117 129249
09:41:118 130231
09:41:119 131213
09:41:120 132195
09:41:121 133177
09:41:122 134159
09:41:123 135141
09:41:124 136123
09:41:125 137105
09:41:126 138087
09:41:127 139069
09:41:128 140051
09:41:129 141033
09:41:130 142015
09:41:131 142997
09:41:132 143979
09:41:133 144961
09:41:134 145943
09:41:135 146925
09:41:136 147907
09:41:137 148889
09:41:138 149871
09:41:139 150853
09:41:140 151835
09:41:141 152817
09:41:142 153799
09:41:143 154781
09:41:144 155763
09:41:145 156745
09:41:146 157727
09:41:147 158709
09:41:148 159691
09:41:149 160673
09:41:150 161655
09:41:151 162637
09:41:152 163619
09:41:153 164601
09:41:154 165583
09:41:155 166565
09:41:156 167547
09:41:157 168529
09:41:158 169511
09:41:159 170493
09:41:160 171475
09:41:161 172457
09:41:162 173439
09:41:163 174421
09:41:164 175403
09:41:165 176385
09:41:166 177367
09:41:167 178349
09:41:168 179331
09:41:169 180313
09:41:170 181295
09:41:171 182277
09:41:172 183259
09:41:173 184241
09:41:174 185223
09:41:175 186205