故事起因
讲一个自己的故事,应网友的请求,帮他找一个人,这个人与他通过支付宝发生过金钱上的来往,后面可能是产生了什么纠纷,具体原因我也不太清楚,他的请求就是:能不能通过支付宝上的转账记录查询到对方的手机号。
由于支付宝的隐私机制,如果对方的手机号不存在你的手机通讯录中,你是看不到对方的完整手机号的,只能看到前三位和后两位,转账的时候能看到对方的头像与昵称数额比较大的时候还能知道对方的名字,但就是无法看到完整的11位的手机号
上面这段话,有个很重要的隐含条件,对方的手机号存在你的手机通讯录中,那我就可以通过支付宝看到他完整的号码!
这就激起了我的兴趣,觉得可以试试,因为思路就是围绕上面那个机制,问题就将简化成将所有可能的号码添加到我的手机通讯录。
如何找到所有可能的号码呢?简单粗暴的就是把中间缺省的6位数字用排列组合的形式全部列出来,但凡学过点排列组合的人都知道,6位数,每位数都有0-9的十种可能,一共就有10的6次方,也就是一百万种……即使能列出来,手机也得炸了吧,有这么大容量存储100万条号码吗?
问题就变成了尽可能的缩小范围,不说太细,怕被别有用心的人利用。
然后就是利用代码将全部可能的号码生成出来,问题就变成了如何将生成的手机号导入手机,这是另一个问题,我还是用代码解决的,也不说太细,怕被别有用心的人利用。
结果就是,最终我帮他找到了。
但我要说的是另外两件事情:
解决问题的通用思路:
当你面对问题时,最先一定要聚焦于最终的结果,围绕最终结果提出解决方案,能提出解决方案,说明理论上这个问题是有解的,否则就没有可行性;然后再围绕解决方案逐步将问题解剖,把事务分解成最基本的组成,利用各种方法,解决分解的过程中的每一个问题,案例中的最终结果是通过支付宝找到某人的号码,解决方案就是利用支付宝的手机通讯录能加好友的机制,问题就变成了将对方的号码添加到通讯录,添加的前提是要拿到号码,拿到号码的解决方案是暴力遍历,但经过分析暴力遍历结果过多,几乎没有可行性,问题就变成了如何减少遍历结果,这个问题的解决方案就是*****************缩小范围,这个方案优化后可以执行,利用代码三下两下就搞定,得到了一堆号码,问题又出现了,怎么将成千上万的号码快速导入手机呢?围绕这个问题再去思考、寻求解决方案,总之,在这样的思想指导下,你一定能慢慢的接近最终的目标。
技术滥用的后果
最终我帮助那个人实现了目的,本想将这个完整的过程记录下来分享给所有人,但有想到,如果这个解决方案被别有用心的人利用了,那岂不是为虎作伥、助纣为虐,这就回到了老生常谈的问题,技术无罪人有罪,任何技术都是中性的,用来干什么取决于人,天使可以用来创建天堂,魔鬼可以用来制造梦魇。
总结
受开源文化的熏陶,分享是程序员的美德,但对于技术分享,还是要多留个心眼,以免在不知情的情况下被人用来作恶。
三观一致的,可以