Android号码匹配长度分析

  (一)  前言
在手机联系人匹配时经常会遇到这样一个问题:
比如我手机中存入的联系人是A,号码 1234567 ; 嗯,那么当07551234567这么一个电话进来的时候,我们肯定要通过07551234567这个号码找到A这个联系人。
所以这里面的匹配过程肯定不是简单而粗暴的字符串比较过程,而是有一个设计在里面,ok,那么我们今天就来分析这个设计。

(二)  设计思想
首先我们要明白一点,就是我们的匹配都是从后往前计算的。
为了解决这个问题,Google给出了一个最小匹配(min match)两个概念,嗯, 嘛意思呢。。?
1.   min match, 最小匹配,就是说让号码从后往前数最小匹配数,这几个数必须相同,才认为最小匹配成功。
比如我们设置min match=7,两个号码1234567和07551234567,我们从后往前数7位,也就是7654321,我们会发现这两个号码从后往前数7位都是7654321,所以,这两个号码通过了最小匹配。
举个反面例子,如果两个号码0234567和07551234567,那么从后往前数7位,第一个号码是0234567,第二个号码是1234567,不相同,嗯,Android系统则认为这两个号码不是一个号码了。
抑或234567和07551234567,这两个号码同样不是一个号码。原因相信各位聪明的午饭自己一算便知道了。


(三)  代码位置
ok..上面讲了这么多,那么我们Android系统里面对应的代码在哪里呢?
1.  在/frameworks/base/telephony/java/android/telephony/PhoneNumberUtils.java里面有个 MIN_MATCH 成员变量,可以用来控制min match
2.  在源代码/external/sqlite/android/OldPhoneNumberUtils.cpp文件里面有个 MIN_MATCH, 也是用来控制最小匹配的,这个值和第1点的值最好设置成一样。
3.  在ContactsProvider下面有个contacts.db,里面有张表 phone_lookup,这张表包含4个字段
    a.  data_id  在data表中对应的记录行
    b.  raw_contact_id  表示这行记录对应的联系人
    c.  normalized_number  表示这个联系人的电话号码,那么由于一个联系人是可以有多个号码的,所以就会出现多行一行的raw_contact_id
    d.  min_match  最小匹配长度,这列记录是系统根据设置的min_match值从联系人表中找到电话号码,再把电话号码后面最小匹配长度截取出来的。如果电话号码不足最小匹配长度,那就有多长截多长。
         比如最小匹配是7, 电话号码01234567,截取之后就会得到7654321;那如果电话号码是123,那么截取之后就是321了。。

嗯, 也差不多是这么多了,如果大家涉及到这块,就知道找到对应的文件,修改min_match值就可以啦!
一点浅见,仅供抛砖引玉而已~
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android应用中,注册和登录是常见的用户管理功能,通常涉及以下几个步骤: 1. 用户注册: - 设计表单:创建一个包含用户名、密码、邮箱等字段的注册界面,验证输入格式。 - 数据库操作:创建数据库表(如SQLite或Firebase)来存储用户信息,包括加密后的密码(使用哈希和盐进行安全存储)。 - 注册逻辑:前端验证表单数据,然后调用后端API进行用户注册,返回注册结果。 2. 用户登录: - 用户输入:提供一个输入框让用户输入已注册的用户名和密码。 - 验证:前端验证输入,然后发送请求到后端。 - 后端验证:验证用户名和密码是否匹配数据库中的记录,同时可能进行账户状态检查(如是否激活)。 - 会话管理:如果验证成功,会在服务器返回的会话令牌(如JWT)或Cookie中保存用户的标识,用于后续的请求验证。 3. 安全措施: - 密码策略:遵循最佳实践,如密码长度限制、复杂度要求,并定期提示用户更换密码。 - HTTPS:确保所有敏感数据传输的安全性,使用HTTPS协议。 - 错误处理:优雅地处理注册和登录过程中可能出现的各种错误,如网络问题、账已存在等。 相关问题: 1. Android如何实现客户端对密码的加密存储? 2. 登录失败时,通常如何向用户显示错误信息? 3. 什么是会话管理和JWT?它们在登录过程中的作用是什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值