比较不同条件下数据库中的电话号码

时间:2017-02-26 18:10:19

标签: android phone-number

我正在开发短信APP,并希望从特定号码接收短信。但是有时可以用国家代码更改号码+923201234567或有时没有国家代码03201234567如何比较数据库中的号码?因为我不知道在数据库中保存了哪种格式编号(使用国家代码或没有国家代码)

public boolean isMember(String phone, long id){
    String query = "SELECT * from members where phone = ? AND active = 1 AND gid = ?";
    Cursor c = dbActions.rawQuery(query, new String[]{String.valueOf(phone), String.valueOf(id)});
    return c.moveToFirst();
}

假设如果数字保存在没有国家代码03201234567的数据库中,那么如果我将其与国家/地区代码进行比较,我的要求就是如此。 923201234567。国家/地区代码可以更改。

PhoneNumberUtils.compare();没用,因为它与数据库无法比较。

2 个答案:

答案 0 :(得分:0)

如果您无法始终获取正确的信息;那么你需要研究一下启发式算法。

意思是:你可以写自己的比较;当你遇到两个数字时:

  03201234567
+923201234567

你可以想象:他们的尾巴"是平等的;唯一的区别是第一个以0开头(所以没有国家代码),第二个以+92开头。因此,宣布这两个数字相等可能是合理的。

所以"解决方案"会做像#34; normalize"您的输入(删除所有非数字内容;除了前导+符号);然后制作这样的"尾部"比较。

如果那是"那么"模糊;我想你应该退一步说明你实际上试图解决的要求。你为什么要比较数字;你打算用那个比较的输出做什么?!

答案 1 :(得分:0)

在将所有电话号码放入数据库之前,将其标准化为相同的格式。这样你就可以进行正常的数据库搜索。

我为电话号码做的另一件事是将所有字母转换为适当的数字,然后删除所有非数字,然后只比较最后7位数字。