基于bitset实现手机号的黑白名单方案

原创 2016年08月30日 17:24:32

目前很多app都把手机号码作为登录的账户名,本文介绍一种高效的基于手机号,来实现黑白名单的方案。

在这里我先用一个例子来说明位图。

      假设我有一个0到31的集合,集合里面的元素不重复,比如这样{0,3,1,5,2,19,7,8,31,21,10}。通过位图,我可以将这样的集合表示为11110001101000000001010000000001, 其中1表示该数值为下标的数存在在集合中,比如第一个1表示0存在集合中,第二个1表示1存在集合中,等等。通过这样做,我们起码可以得到两个好处

      1) 节省空间--我们可以用二进制一个位来存储存储两个信息,一是存不存在,而是存在的数是多少(通过一个bit就可以得到这么多信息,真了不起)。

      2) 排序--从左到右遍历这个为图,我们可以得到排序的集合,比如上例中,我们可以得到集合 {0,1,2,3,7,8,10,19,21,31}

      如果将所有这电话号码用位图表示,那么需要9999999999个bit (10个9, 考虑到手机号码的第一位都是1)。 9999999999 bit = (9999999999/8) byte = (9999999999 / (8 * 1024)) KB = (9999999999 / 8 *1024*1024) M = 1192M

      嗯....,1192M,内存占有还是太大,我们前期的黑白名单所占内存远远低于这个值。 考虑到手机号码的前3位都差不多,而且总数最多30个,所以考虑到手机号码拆分为两部分(头3位和剩余8位),这样就把位图的位数就降2个数量级了。所以如果我们要在内存中装入手机号码后8位,需要99999999(8个9)个bit,算一下

      99999999 bit = (99999999/8) byte = (99999999 / (8 * 1024)) KB = (99999999 / 8 *1024*1024) M = 11.92M 

内存中装入头2位(手机号第一位始终为1,因此只需装入后面2位),需要99(2个9)个bit,算下 
99 bit = 99/8 byte =12.375 byte。 

大约12M 内存,就能表示所有手机号码,达到黑白名单。 这个比用redis等缓存,高效很多,java里面的bitset也是这个原理。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android发送SOAP数据给服务器调用webservice,实现手机号归属地查询

创建android工程MobileBelong,设置网络访问权限。   资源 view plaincopy to clipboardprint? string name="...
  • mm2223
  • mm2223
  • 2011-12-26 08:05
  • 2652

实现手机号的分隔显示与编辑181 6836 8565

手机号都是一个文本框,通过控制文本框的显示内容就可以控制你输入手机号,支持移动到手机号中间增加和删除一个字符,支持粘贴的字符串长度和原长度不超过11位的粘贴操作。 它主要通过控制文本框代理来实现,这...

Android 修改密码或者手机号事务实现

前言在开发中我们经常会遇到以下情况,比如以下场景:在修改密码的时候,要执行以下步骤:1. 输入手机号获取验证码 2. 输入验证码 3. 输入新密码 1. 第一种情况可以把修改密码这三个步骤看成是一个事...

Java 实现web程序法短信给手机号

部分程序需要实现发短信的功能,其实这个本质上就是个通信的事情。            说到通信,无非就是tcp、udp的方式,但是无论如何,就像是支付一样,要运营商提供你一定的接口,你才可以使用人家...

Android发送SOAP数据给服务器调用webservice,实现手机号归属地查询

创建android工程MobileBelong,设置网络访问权限。   资源 Hello World, MainActivity! 手机号归属地查询 手机号 ...

网赚平台Clixsense+手机号邮箱短信提醒调查实现轻松网赚

Clixsense是一家长期信誉,稳定值支付的单干强站,普通账户8美元可以提款,高级账户6美元可以提款,比较容易做到。看到网上很多把Clixsense介绍成点击站的,其实是不太准确的。 Clixse...

Android使用mob实现手机号验证注册

现在很多的app都采用首次进入使用手机号码快速注册成功,然后登入设置各种用户信息。这里使用mob第三方sdk实现手机号码的快速注册,实现起来也很简单,集成文档也有说明,这里把实现的过程和结果都记录下来...
  • linxi7
  • linxi7
  • 2016-09-23 11:34
  • 3059

jmeter实现手机号归属地接口测试案例

通过jmeter进行手机号归属地接口测试。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)