相信很多北京本地or北漂一族摇了N年车牌号的人大有人在,作为一个即将加入摇号大军的程序员,带着好奇心查看了一下摇号相关的规则和程序,是否公平公正公开公...

官方信息

温馨提示:摇号月的25日,在公证人员的公证下,工作人员按规则为审核通过的编码分配摇号基数序号,形成摇号池编码数据文件,并刻盘封存,将参与26日的摇号。26日摇号结束后,请您注意查询是否中签,中签后凭打印的“小客车配置指标确认通知书”办理购车手续。
特别说明:
1、摇号基数序号分配方法:首先,将当期所有审核通过的编码按从小到大的顺序分配序号;然后,第二阶梯及以上的编码按从小到大的顺序,接在后面继续分配序号;再然后,第三阶梯及以上的编码按从小到大的顺序,接在后面继续分配序号;以此类推。因此,高阶梯的编码所对应的多个摇号基数序号是不连号的,当期摇号基数序号总数=第一阶梯人数+第二阶梯人数×2+第三阶梯人数×3……
2、摇号方法:摇号程序从当期所有摇号基数序号中随机抽取中签者,高阶梯的编码对应多个摇号基数序号,于是享受了多倍的中签概率。摇号程序确保高阶梯编码的多个摇号基数序号最多只能摇中一个,当其中一个摇号基数序号中签,该编码即中签。

解读

1、摇号月的25日会将所有摇号的数据存放到数据文件(一个csv文件集合的压缩包,后面会提到,这个是我们写摇号程序的关键数据)
2、摇号月的26日会摇出一个6位的随机数(这个是用来计算中签的关键)
3、第几阶梯就会为对应阶梯的人分配几个摇号基础序号,比如A现在是第三阶梯,B是第二阶梯,C是第一阶梯,那么对应的排序就为ABCABA(123456)

官方摇号程序

为了公平公正,官方提供了可执行的摇号程序,已经对应摇号期数的摇号数据提供了下载。

温馨提示了我们Windows7操作系统,系统应当安装有.NET Framework 2.0,既然是.NET,那我们就反编译一下,看看到底是怎么计算的~

反编译

使用反编译工具ILSPY,直接搞定,我们会发现源程序是C#写的,关键代码放在AllRandomPick.cs中,其中最关键的两句为:

Random random = new Random(allRandomPickData.Seed);
pickNumber = random.Next(allRandomPickData.TotalNumber);

Random为C#自带的随机函数
allRandomPickData.Seed 表示6位随机种子数
allRandomPickData.TotalNumber 表示摇号池编码数

这么看来,如果确保随机种子数是随机的话,这个算法可以认为是"绝对"公平的。
如果作弊的话,一是控制随机种子数,二是伪造摇号编码插入到对应的位置。
从此看来,大家还是乖乖摇号或者买新能源吧。。。

提取C#随机数类

官方虽然提供了C#版的摇号程序,但是作为世界上最好的语言PHP怎能不尝试一下呢?

从之前的文章 自己实现随机数,我们不难发现,如果随机种子的固定的话,那么我们产生的随机数也是固定的。

但是不同语言的随机数实现方法是不同的,我们要向实现C#版的random,就必须知道C#纠结是如何生成随机数的。

感谢微软开源(不开源的话,可能没法用PHP实现了),让我轻松的找到了对应的实现方法 https://github.com/dotnet/cor...

既然已经有了源代码,我们只要将C#翻译成PHP就可以了。

分析压缩包

官方提供了每期的压缩包,我们解压之后,能够看到一堆的文件列表,随便打开一个A列代表了当前的基础序号,B列代表了对应的摇号编码,如果随机到的基础序号对应的是你的编码,那么,就该恭喜你了。

PHP实现

随机类有了,只要使用随机种子初始化随机类,然后在总编码数范围内随机,next...next...直到全部指标分配完就可以了,代码我放到了 github 上,有兴趣的小伙伴可以点击查看。

再放个最终的运行结果:

到官网上验证一下:

摇号越久就越容易中么?

不是,虽然你的倍数一直在增加,但是和你一起摇的人的倍数也在增加,后面加入的人也越来越多,毕竟指标数在变得越来越少。

真的没办法提高概率了么?

有,比如下方二维码试试

北京小客车摇号程序PHP版相关推荐

  1. 北京摇号系统服务器,支付宝“城市服务”平台可查询北京小客车摇号结果

    支付宝"城市服务"平台可查询北京小客车摇号结果 [TechWeb报道]9月7日消息,北京市交通委与支付宝达成合作,市内交通出行服务将登陆城市服务平台.市民在手机上进入支付宝&quo ...

  2. 北京小客车摇号数据的一点质疑

    今天早上来的早,从网站上下载了程序和数据文件便开始验证自己能不能中号. 还好,试了120个连续的种子号码,果然中签了一次,打消了俺永远不会中签的猜疑. 于是继续深入,打开数据文件看看文件内容. 自己是 ...

  3. 杭州个人小客车摇号百分之百中签率所需要的时间预测和阶梯摇号概率提升

    2018年7月31日,杭州第一次车牌阶梯摇号落下帷幕,各种准确的数据进行了详细公布,咱们可以更准确的对像我这样运气不佳久摇不中的人进行摇号预测了.可以看到第一次第一阶梯的阶梯摇号的概率相当于普通摇号概 ...

  4. 获取网页中所有的小客车摇号信息

    杭州摇号网站分页显示,浏览起来非常的不方便,于是写了几行代码 将它给全部下载到一个文件中.代码很简单,先通过httpwatch观察,http 是如何拼接请求的,然后在代码中将链接拼接好,批量下载下来. ...

  5. 前端初学之利用html,css,js实现车牌摇号程序(一)

    *三语言介绍: *html:**超文本标记语言,常用来设计网页界面 css:用来给网页排版,加属性之类的, js:浏览器脚本语言, 用来做一些数据存储之类的, 三者组合用来实现一些网页内容, 初学练手 ...

  6. 用JavaScript写的一个摇号程序(随机数)

    <script type="text/javascript"></script> 老弟叫我帮忙他找个摇号程序,号码从001-200. 最近刚看了JS高级编程 ...

  7. Python随机车牌;京牌摇号⼩程序

    Python随机车牌 京牌摇号⼩程序 需求: 允许⽤户最多选3次 每次放出20个⻋牌供⽤户选择 京[A-Z]-[xxxxx], 可以是数字和字⺟在组合 想实现这个程序 ,有2个问题要解决: 如果实现输 ...

  8. UnionLotto随机摇号程序

    UnionLotto随机摇号代码 //function:union lotto //author:zaker //date:2022-02-16 //version_NO:v2.0 #include ...

  9. js摇号程序_用JavaScript写的一个摇号程序(随机数)

    老弟叫我帮忙他找个摇号程序,号码从001-200.最近刚看了JS高级编程的随机数这方面的知识.就自己开始动手做了一个. 代码: var theTimer; var iNum=0; //var flag ...

最新文章

  1. 程序员被知乎优化!瞄准bat大厂再次求职!结果让人意外!
  2. BZOJ1725 牧场的安排
  3. Syslog系统日志配置
  4. python 3_Python3 列表
  5. 高通camera架构讲解
  6. Spring MVC学习总结(12)——Spring MVC集成Swagger时报错{schemaValidationMessages:[
  7. python 中decorator和property
  8. ES6 系列之我们来聊聊装饰器
  9. PotPlayer播放器在双屏扩展模式下,视频播放时所遇到的几个常见问题的专业解答
  10. 阿里云云计算 34 RDS的概念
  11. 免费的银行卡BIN查询网站(API)
  12. 牛蛙怎么做好吃 牛蛙的家常做法
  13. 苹果cms怎么更换模板logo详细教程
  14. 数据分析---------指数计算
  15. 安卓报错:E/EGL_adreno: tid 2148: eglSurfaceAttrib(1338): error 0x3009 (EGL_BAD_MATCH)
  16. 小米技术委员能扛起雷军技术立业的大旗吗?
  17. 团队作业7—团队项目设计完善编码测试
  18. 国产系统Ubuntu麒麟 我们的第三条路
  19. vs-OpenGL编程入门学习
  20. 散列查找(重点讲解查找失败的ASL) 习题集

热门文章

  1. Arduino、arm、树莓派、单片机四者有什么不同?
  2. 由“播放器倍速”引发的ExoPlayer实践
  3. prometheus+node_exporter+grafana+alertManager+prometheus-webhook-dingtalk实现服务器监控显示,钉钉机器人告警消息通知
  4. python3.8.2安装pygame教程_Python3.8安装Pygame教程步骤详解
  5. [SuperMap软件教程] 如何使用超图将线转面
  6. 我在南邮的三年—保研生涯
  7. 基于ssm宠物领养网站程序-毕业设计程序
  8. mybatis基本操作流程
  9. matlab入门作业
  10. 打开别人的工程提示IAR版本不兼容问题