用.NET写“算命”程序.NET骚操作

“算命”,是一种迷信,我父亲那一辈却执迷不悟,有时深陷其中,有时为求一“上上签”,甚至不惜重金,向“天神”保佑。我曾看到过有些算命网站,可以根据人的生辰八字,来求得这个人一生的财运、桃花运,如果第一卦算得不好,还可以向“天神”“请愿”(充钱),再算一卦,直到达到好运为止。

作为一个深信唯物辩证法的人来说,这些东西当然是不信。

但仔细口味,发现这些东西其中需要有些科学道理。我可以将算命总结为以下“三要素”:

如果将算命当作一个函数,那它的输入无疑是姓名、其它个人信息和诚心。,输出就是一个分数(0-100),可以用下图的代码表示:

intdestinyScore=f(name,otherPersonalInformation,faith);下面,我将用.NET实现这个“算命”的功能。

如果只以姓名作为输入,那么这个函数可以简化为:

intdestinyScore=f(name);这可能就好办多了,如.NET中的.GetHashCode(),即可快速获取一个字符串的哈希值,这个哈希值应该是固定的(吗?),该值的取值范围是int.MinValue-int.MaxValue。因此最简单的办法,可以先可以通过对100求模,此时的取值范围是-99~99;然后再取绝对值+1即可,代码如下:

intGetForturn(stringname){ returnMath.Abs(name.GetHashCode()%100)+1;}在.NETFramework4.8中运行,可以算出我(周杰)的得分固定为15分。

在.NETCore中,这个算法每次重新运行,算出的结果都不同,因为.NETCore为了确保安全性,在应用程序启动时,会随机生成一个字符串哈希值种子,因此每次exe运行,哈希值都会变,文档是这么说的:

很显然,这不符合“一致性”,看来想简单地通过GetHashCode()快速“算命”的想法落空了,只能使用标准的哈希算法。

当然,使用如此简单的算法,客户知道了,可能也不太情愿消费更多的“诚意金”了。

哈希算法可以给任意长度的字符转换为一串二进制数组,也就是哈希值。.NET内置了许多不同的哈希算法可供选择:

我们要指定一点点“天机”(加盐),但“天机不可泄露”,因此简单地MD5等单纯哈希算法排除;

我们要转化为一个整数,最大的整数类型,long/Int64,为64位,而最小的内置哈希算法,MD5,就已达128位。因此也要排除HMACSHA等“加盐”哈希。当然这些哈希值也可以手动截取部分长度,但安全性是个问号(也受强迫症影响)。

所以最终我们选择了Rfc2898DeriveBytes,该算法可以生成任意指定长度的哈希值。这个类的构造函数要求输入一个盐值和迭代次数,在这个示例中我们取一个别人不知道的值(代码中写死了,你们假装不知道,你们想用这个代码时可以改改)。可以写出如下代码:

intGetForturn(stringname){ using(varh=newRfc2898DeriveBytes(name, salt:newbyte[8]{44,2,3,4,5,6,7,8}, iterations:10086)) { return(int)(BitConverter.ToUInt64(h.GetBytes(8),0)%100)+1; };}可见算出一卦80分以上的“上签”,已经非常不容易了。我从网上自动生成了888个姓名,然后调用该函数,发现得分超过90分“上上签”标准的,只有83个,相同于十分之一,符合分布特点(详情见Github上的代码)。

通过以下代码,可以算出“狗二”是48分,“狗三”是96分,可见一字之差相差甚远:

GetForturn("狗二").Dump();//48GetForturn("狗三").Dump();//96完整算法最后,依葫芦画瓢,加上个人信息参数(生日)和“诚意金次数”,完成最后的算法:

intGetForturn(stringname,DateTimebirthDay,intfaithCount){ using(varh=newRfc2898DeriveBytes(name+birthDay+faithCount, salt:newbyte[8]{44,2,3,4,5,6,7,8}, iterations:10086)) { return(int)(BitConverter.ToUInt64(h.GetBytes(8),0)%100)+1; };}然后又是“狗二”和“狗三”,加上他们的生日参数后,默认他们的得分是95分和3分:

GetForturn("狗二",newDateTime(1994,5,17),0).Dump();//95GetForturn("狗三",newDateTime(1996,11,3),0).Dump();//3但狗三经过1次“诚意金”后,也求得了高达99分以上的“上上签”:

GetForturn("狗二",newDateTime(1994,5,17),0).Dump();//98GetForturn("狗三",newDateTime(1996,11,3),).Dump();//99最后的话Rfc2898DeriveBytes非常有用,本文说了Rfc2898DeriveBytes的一种使用场景,相信各位在工作当时也经常会有机会去接触它。

THE END
1.免费算命算命最准生辰八字算命算卦风水生肖星座感恩结缘仙指阁免费算命大全!本站是全网算命最准的平台,主要测算项目包含生辰八字算命,一生运势详批,姓名测试打分,在线算命,在线占卜算卦,万年历,老黄历查询,手机号码吉凶测算,姓名配对,姻缘合婚,周公解梦,车牌号码吉凶,塔罗牌占卜,生肖运势,星座运势,宝宝https://m.xianzhige.com/
2.免费算命命运分析运势预测算命的意义是在您迷茫时给您一些建议,让您做适合自己事情,以发挥自己最大的能力。命运虽有定数,仍有一定的伸缩范围,所谓火烧一尺是烧,火烧一丈也是烧,人生奋斗仍有其积极意义。 本站免费算命主要根据名著、大师的口诀与你的出生时间一一对应,进行程序自动比对,生成结果,并且根据口诀不断完善,为您提供一些人生建议http://m-mfsm.kvov.com/
3.生辰八字算命,四柱八字算命,免费算命四柱八字算命,千古不传的秘密,流落民间的八字知识秘籍,改运转运,算命最准的网站,根据周易算命的方法,为您进行最准的免费测八字算命!。https://www.7xiuxing.com/suanming/clear/
4.八字算命生辰八字算命周易算命八字算命是根据民间流传的测试方法,预测吉凶祸福。如:易学八字、生肖阴阳五行、紫微斗数、姓名三才五格、星座占星、塔罗牌、奇门遁甲、六爻卦象、等。测算者可输入出生的年月日时,系统会自动转化成干支历日期纪年法。神巴巴免费八字算命包括:八字查询、五行查询、童https://services.shen88.cn/suanming.html
5.免费算命生辰八字算命网在线算命大全非常运势免费算命网是算命最准的免费网站,免费八字算命网提供了数百种免费在线算命服务,算命大全汇集了中国古代周易算命、生辰八字算命、姓名算命、紫微算命、测试算命等传统命理,以及西方星座算命、塔罗占卜,对算命婚姻、爱情、事业、财运、健康诸方面提供全方位的参考https://wap.99166.com/phoneapp/
6.用生辰八字算命算婚姻比较准的推荐一下八字测算生辰八字测算八字算命免费测八字命理测算,闰月和时辰的划分需要根据具体情况进行调整. 免费算命八字算命算卦大家找算命,免费算命生辰八字算命在线算命大全算命最准的免费站,性别根据出生时间免费推算婚姻、恋爱、异性缘、配偶个性、婚姻宜配、忌配情况准确度较高含生辰八字、紫微斗数、三世书、生肖星座等多种推算方https://www.16757.com/ysh/shengxiao/5891.html
7.在线算命生辰八字免费,rpa,机器人,自动化dajiazhao.com免费算命-八字算命-算卦 本站包括数十项生辰八字算命功能、生肖运势、抽签算命、婚姻算命等均免费使用。努力做算命最准的免费网站!五行查询1、大家找算命网生辰八字五行查询系统通过周易算命原理、传统八字算命、子平八 大家找算命网大家找算命网简介 算命最准的免费网站-大家找算命网提供:2024龙年运势、免https://www.wdlinux.cn/html/zonghe/20241211/24105.html
8.2037年05月29日属虎人运势运程如何财运爱情当日次吉生肖https://m.smxs.com/shengxiaoriyun/hu/20370529.html
9.看八字算命网站有哪些免费(算婚姻最准的免费网站简单姓名八字配对)1、算婚姻最准的免费网站算命最准的网站排名第一:布衣居算命网最准的算命网站排名第二:非凡算命网。最准https://www.suanteng.com/show-23515.html
10.算命最准的免费网站测姻缘(找免费算命网站有哪些免费算命最准的相信大家都听说过算命,一些专业算命师的占卜准确率非常高,比较受关注。免费算命2020最准的免费网站《周易》是中国传统思想文化中自然哲学和人文实践的理论根源,是古代汉民族思想和智慧的结晶,被誉为“道之源”。 算婚姻最准的免费网站算命最准的网站排名第一:布衣居算命网最准的算命网站排名第二:非凡算命网。最准https://www.ynysb.com/news/196917.html
11.生辰免费八字测算网周易算命八字详批八字合婚称骨算命2024年最新算命算法,算命的免费网站,主要测算生辰八字算命,八字算命婚姻,免费姓名测试,宝宝起名打分,星座运势,周易算命,在线抽签等数十项免费在线精准算命_查运势网https://www.916m.com/
12.八字易经算法之用JAVA实现最简单的批八字算命* 最简单的八字乾造实现 *批八字算命,只看日柱 *@authorluozhuang 大师♂罗莊 */ publicclassLuozhuangTanZao{ publicString[][] DayZhuMemo; publicLuozhuangTanZao(){ String[][] arrayOfString =newString[60][]; String[] arrayOfString1 =newString[2]; https://blog.csdn.net/luozhuang/article/details/8662259
13.史上最狂老祖燕灵仙君(林天)史上最狂老祖燕灵仙君免费阅读史上最狂老祖燕灵仙君是由作家林天所作,本书属于玄幻奇幻小说,本书由言情888小说网的会员收集于网络,供书友们免费阅读。http://www.xs386.com/23188/
14.身份证看你一生命运测命运最简便的方法关于命运这件事,有的人选择相信,有的人选择不相信。其实命运信也罢,不信也摆。上天所安排好的命运,早在冥冥之中就已经注定好了。先人通过算命、占卦来预知身份证号码中缺少3的人,固然性情较为奇变巧诈,日常生活却十分简单勤劳,并能努力不懈于工作之中。不过收入虽多,但额外的支出也不少,若不加以规划,财富https://www.qiyuange.com/zhanbu/69432.html
15.hao123hao123是汇集全网优质网址及资源的中文上网导航。及时收录影视、音乐、小说、游戏等分类的网址和内容,让您的网络生活更简单精彩。上网,从hao123开始。https://www.hao123.com/
16.小白也能自己算命——最简单的梅花易数占卜时间 事情无论发生在什么时候,占卜的时间都应该你想去占卜的这个时辰中起卦。这个时间是你心灵想去求测的时间。 占卜方法 1. 先在心中想好你要问的事情,然后在第一时间随心想https://www.jianshu.com/p/1a368bd30700