What do “strict” or “loose” comparisons mean for PhoneNumberUtils.compare?
PhoneNumberUtils.compare
with the signature (Context context, String a, String b)
lets you compare two phone numbers to see if they are equal. The documentation says:
Checks a resource to determine whether to use a strict or loose comparison algorithm.
What does this mean? How is it checking a resource to determine which algorithm to use, and how do the algorithms differ?
android
add a comment |
PhoneNumberUtils.compare
with the signature (Context context, String a, String b)
lets you compare two phone numbers to see if they are equal. The documentation says:
Checks a resource to determine whether to use a strict or loose comparison algorithm.
What does this mean? How is it checking a resource to determine which algorithm to use, and how do the algorithms differ?
android
As far as the resource, it callsgetResources().getBoolean()
on theContext
to retrieve abool
that would be set by the carrier; namelyconfig_use_strict_phone_number_comparation
. As for the algorithms, they're rather involved, and tedious. However, the main difference is that the loose algorithm is basically just doing blind comparisons of the character data, right to left, which usually suffices for caller ID on domestic numbers. The strict algorithm takes into account all sorts of wacky minutiae for the cluster that is international telephony.
– Mike M.
Nov 23 '18 at 12:41
If you like, you can have a look at the source. The loose algorithm: android.googlesource.com/platform/frameworks/base/+/master/…. And the strict: android.googlesource.com/platform/frameworks/base/+/master/….
– Mike M.
Nov 23 '18 at 12:41
@MikeM. Thanks, sounds like an answer post!
– Flimm
Nov 23 '18 at 12:42
I could probably manage that. :-) I wasn't sure how much detail you wanted concerning the algorithms. Frankly, the strict one is a little mind numbing, and I've never bothered to fully digest it. Cool, gimme a minute to format. Thanks!
– Mike M.
Nov 23 '18 at 12:45
add a comment |
PhoneNumberUtils.compare
with the signature (Context context, String a, String b)
lets you compare two phone numbers to see if they are equal. The documentation says:
Checks a resource to determine whether to use a strict or loose comparison algorithm.
What does this mean? How is it checking a resource to determine which algorithm to use, and how do the algorithms differ?
android
PhoneNumberUtils.compare
with the signature (Context context, String a, String b)
lets you compare two phone numbers to see if they are equal. The documentation says:
Checks a resource to determine whether to use a strict or loose comparison algorithm.
What does this mean? How is it checking a resource to determine which algorithm to use, and how do the algorithms differ?
android
android
asked Nov 23 '18 at 11:43
FlimmFlimm
52.2k23136157
52.2k23136157
As far as the resource, it callsgetResources().getBoolean()
on theContext
to retrieve abool
that would be set by the carrier; namelyconfig_use_strict_phone_number_comparation
. As for the algorithms, they're rather involved, and tedious. However, the main difference is that the loose algorithm is basically just doing blind comparisons of the character data, right to left, which usually suffices for caller ID on domestic numbers. The strict algorithm takes into account all sorts of wacky minutiae for the cluster that is international telephony.
– Mike M.
Nov 23 '18 at 12:41
If you like, you can have a look at the source. The loose algorithm: android.googlesource.com/platform/frameworks/base/+/master/…. And the strict: android.googlesource.com/platform/frameworks/base/+/master/….
– Mike M.
Nov 23 '18 at 12:41
@MikeM. Thanks, sounds like an answer post!
– Flimm
Nov 23 '18 at 12:42
I could probably manage that. :-) I wasn't sure how much detail you wanted concerning the algorithms. Frankly, the strict one is a little mind numbing, and I've never bothered to fully digest it. Cool, gimme a minute to format. Thanks!
– Mike M.
Nov 23 '18 at 12:45
add a comment |
As far as the resource, it callsgetResources().getBoolean()
on theContext
to retrieve abool
that would be set by the carrier; namelyconfig_use_strict_phone_number_comparation
. As for the algorithms, they're rather involved, and tedious. However, the main difference is that the loose algorithm is basically just doing blind comparisons of the character data, right to left, which usually suffices for caller ID on domestic numbers. The strict algorithm takes into account all sorts of wacky minutiae for the cluster that is international telephony.
– Mike M.
Nov 23 '18 at 12:41
If you like, you can have a look at the source. The loose algorithm: android.googlesource.com/platform/frameworks/base/+/master/…. And the strict: android.googlesource.com/platform/frameworks/base/+/master/….
– Mike M.
Nov 23 '18 at 12:41
@MikeM. Thanks, sounds like an answer post!
– Flimm
Nov 23 '18 at 12:42
I could probably manage that. :-) I wasn't sure how much detail you wanted concerning the algorithms. Frankly, the strict one is a little mind numbing, and I've never bothered to fully digest it. Cool, gimme a minute to format. Thanks!
– Mike M.
Nov 23 '18 at 12:45
As far as the resource, it calls
getResources().getBoolean()
on the Context
to retrieve a bool
that would be set by the carrier; namely config_use_strict_phone_number_comparation
. As for the algorithms, they're rather involved, and tedious. However, the main difference is that the loose algorithm is basically just doing blind comparisons of the character data, right to left, which usually suffices for caller ID on domestic numbers. The strict algorithm takes into account all sorts of wacky minutiae for the cluster that is international telephony.– Mike M.
Nov 23 '18 at 12:41
As far as the resource, it calls
getResources().getBoolean()
on the Context
to retrieve a bool
that would be set by the carrier; namely config_use_strict_phone_number_comparation
. As for the algorithms, they're rather involved, and tedious. However, the main difference is that the loose algorithm is basically just doing blind comparisons of the character data, right to left, which usually suffices for caller ID on domestic numbers. The strict algorithm takes into account all sorts of wacky minutiae for the cluster that is international telephony.– Mike M.
Nov 23 '18 at 12:41
If you like, you can have a look at the source. The loose algorithm: android.googlesource.com/platform/frameworks/base/+/master/…. And the strict: android.googlesource.com/platform/frameworks/base/+/master/….
– Mike M.
Nov 23 '18 at 12:41
If you like, you can have a look at the source. The loose algorithm: android.googlesource.com/platform/frameworks/base/+/master/…. And the strict: android.googlesource.com/platform/frameworks/base/+/master/….
– Mike M.
Nov 23 '18 at 12:41
@MikeM. Thanks, sounds like an answer post!
– Flimm
Nov 23 '18 at 12:42
@MikeM. Thanks, sounds like an answer post!
– Flimm
Nov 23 '18 at 12:42
I could probably manage that. :-) I wasn't sure how much detail you wanted concerning the algorithms. Frankly, the strict one is a little mind numbing, and I've never bothered to fully digest it. Cool, gimme a minute to format. Thanks!
– Mike M.
Nov 23 '18 at 12:45
I could probably manage that. :-) I wasn't sure how much detail you wanted concerning the algorithms. Frankly, the strict one is a little mind numbing, and I've never bothered to fully digest it. Cool, gimme a minute to format. Thanks!
– Mike M.
Nov 23 '18 at 12:45
add a comment |
1 Answer
1
active
oldest
votes
How is it checking a resource to determine which algorithm to use
It calls getResources().getBoolean()
on the Context
parameter to retrieve a bool
resource that will have been set by the carrier; namely:
com.android.internal.R.bool.config_use_strict_phone_number_comparation
Just to note, the compare(String a, String b)
method automatically uses the loose method.
how do the algorithms differ?
Both are rather involved, and tedious, but the main difference is that the loose algorithm is basically doing blind character comparisons, right to left, accounting pretty much only for formatting differences. This is usually more than sufficient for domestic calls.
The strict algorithm, however, takes into account all sorts of minute rules for international numbers and their varying acceptable differences; e.g., as commented in the source, "090-1234-1234 must not be equal to 90-1234-1234 in Japan".
These algorithms are (currently) in the methods named compareLoosely()
and compareStrictly()
in the source code for PhoneNumberUtils
. I've not linked directly to the line numbers, as that's the master branch, and they're sure to change eventually.
Essentially, if you're relatively certain that you'll be dealing only with domestic numbers, the loose method is probably fine. If you're going to be handling international numbers, use the strict method.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53446070%2fwhat-do-strict-or-loose-comparisons-mean-for-phonenumberutils-compare%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
How is it checking a resource to determine which algorithm to use
It calls getResources().getBoolean()
on the Context
parameter to retrieve a bool
resource that will have been set by the carrier; namely:
com.android.internal.R.bool.config_use_strict_phone_number_comparation
Just to note, the compare(String a, String b)
method automatically uses the loose method.
how do the algorithms differ?
Both are rather involved, and tedious, but the main difference is that the loose algorithm is basically doing blind character comparisons, right to left, accounting pretty much only for formatting differences. This is usually more than sufficient for domestic calls.
The strict algorithm, however, takes into account all sorts of minute rules for international numbers and their varying acceptable differences; e.g., as commented in the source, "090-1234-1234 must not be equal to 90-1234-1234 in Japan".
These algorithms are (currently) in the methods named compareLoosely()
and compareStrictly()
in the source code for PhoneNumberUtils
. I've not linked directly to the line numbers, as that's the master branch, and they're sure to change eventually.
Essentially, if you're relatively certain that you'll be dealing only with domestic numbers, the loose method is probably fine. If you're going to be handling international numbers, use the strict method.
add a comment |
How is it checking a resource to determine which algorithm to use
It calls getResources().getBoolean()
on the Context
parameter to retrieve a bool
resource that will have been set by the carrier; namely:
com.android.internal.R.bool.config_use_strict_phone_number_comparation
Just to note, the compare(String a, String b)
method automatically uses the loose method.
how do the algorithms differ?
Both are rather involved, and tedious, but the main difference is that the loose algorithm is basically doing blind character comparisons, right to left, accounting pretty much only for formatting differences. This is usually more than sufficient for domestic calls.
The strict algorithm, however, takes into account all sorts of minute rules for international numbers and their varying acceptable differences; e.g., as commented in the source, "090-1234-1234 must not be equal to 90-1234-1234 in Japan".
These algorithms are (currently) in the methods named compareLoosely()
and compareStrictly()
in the source code for PhoneNumberUtils
. I've not linked directly to the line numbers, as that's the master branch, and they're sure to change eventually.
Essentially, if you're relatively certain that you'll be dealing only with domestic numbers, the loose method is probably fine. If you're going to be handling international numbers, use the strict method.
add a comment |
How is it checking a resource to determine which algorithm to use
It calls getResources().getBoolean()
on the Context
parameter to retrieve a bool
resource that will have been set by the carrier; namely:
com.android.internal.R.bool.config_use_strict_phone_number_comparation
Just to note, the compare(String a, String b)
method automatically uses the loose method.
how do the algorithms differ?
Both are rather involved, and tedious, but the main difference is that the loose algorithm is basically doing blind character comparisons, right to left, accounting pretty much only for formatting differences. This is usually more than sufficient for domestic calls.
The strict algorithm, however, takes into account all sorts of minute rules for international numbers and their varying acceptable differences; e.g., as commented in the source, "090-1234-1234 must not be equal to 90-1234-1234 in Japan".
These algorithms are (currently) in the methods named compareLoosely()
and compareStrictly()
in the source code for PhoneNumberUtils
. I've not linked directly to the line numbers, as that's the master branch, and they're sure to change eventually.
Essentially, if you're relatively certain that you'll be dealing only with domestic numbers, the loose method is probably fine. If you're going to be handling international numbers, use the strict method.
How is it checking a resource to determine which algorithm to use
It calls getResources().getBoolean()
on the Context
parameter to retrieve a bool
resource that will have been set by the carrier; namely:
com.android.internal.R.bool.config_use_strict_phone_number_comparation
Just to note, the compare(String a, String b)
method automatically uses the loose method.
how do the algorithms differ?
Both are rather involved, and tedious, but the main difference is that the loose algorithm is basically doing blind character comparisons, right to left, accounting pretty much only for formatting differences. This is usually more than sufficient for domestic calls.
The strict algorithm, however, takes into account all sorts of minute rules for international numbers and their varying acceptable differences; e.g., as commented in the source, "090-1234-1234 must not be equal to 90-1234-1234 in Japan".
These algorithms are (currently) in the methods named compareLoosely()
and compareStrictly()
in the source code for PhoneNumberUtils
. I've not linked directly to the line numbers, as that's the master branch, and they're sure to change eventually.
Essentially, if you're relatively certain that you'll be dealing only with domestic numbers, the loose method is probably fine. If you're going to be handling international numbers, use the strict method.
answered Nov 23 '18 at 13:24
Mike M.Mike M.
29.7k66174
29.7k66174
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53446070%2fwhat-do-strict-or-loose-comparisons-mean-for-phonenumberutils-compare%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
As far as the resource, it calls
getResources().getBoolean()
on theContext
to retrieve abool
that would be set by the carrier; namelyconfig_use_strict_phone_number_comparation
. As for the algorithms, they're rather involved, and tedious. However, the main difference is that the loose algorithm is basically just doing blind comparisons of the character data, right to left, which usually suffices for caller ID on domestic numbers. The strict algorithm takes into account all sorts of wacky minutiae for the cluster that is international telephony.– Mike M.
Nov 23 '18 at 12:41
If you like, you can have a look at the source. The loose algorithm: android.googlesource.com/platform/frameworks/base/+/master/…. And the strict: android.googlesource.com/platform/frameworks/base/+/master/….
– Mike M.
Nov 23 '18 at 12:41
@MikeM. Thanks, sounds like an answer post!
– Flimm
Nov 23 '18 at 12:42
I could probably manage that. :-) I wasn't sure how much detail you wanted concerning the algorithms. Frankly, the strict one is a little mind numbing, and I've never bothered to fully digest it. Cool, gimme a minute to format. Thanks!
– Mike M.
Nov 23 '18 at 12:45