Tạo số điện thoại bằng Python

Xác thực số điện thoại có thể là một nhiệm vụ rất khó khăn. Định dạng của số điện thoại có thể khác nhau giữa các quốc gia. Heck, nó cũng có thể khác nhau trong cùng một quốc gia. Một số quốc gia chia sẻ cùng một mã quốc gia, trong khi một số quốc gia khác sử dụng nhiều mã quốc gia. Theo một ví dụ từ kho lưu trữ GitHub

$ pip3 install Phonenumbers
7 của Google, Hoa Kỳ, Canada và các đảo Caribe, tất cả đều có chung mã quốc gia [
$ pip3 install Phonenumbers
8]. Mặt khác, có thể gọi các số điện thoại từ Kosovo bằng mã quốc gia của Serbia, Slovenia và Ma-rốc

Đây chỉ là một vài thách thức trong việc xác định hoặc xác thực số điện thoại. Thoạt nhìn, ít nhất người ta có thể xác thực mã quốc gia của một số điện thoại bằng RegEx. Tuy nhiên, điều này có nghĩa là bạn sẽ phải viết quy tắc RegEx tùy chỉnh cho mọi quốc gia trên thế giới, chỉ để xác thực mã quốc gia. Ngoài ra, một số nhà cung cấp dịch vụ điện thoại di động có quy tắc riêng của họ [ví dụ: một số chữ số nhất định chỉ có thể sử dụng một dãy số nhất định]. Bạn có thể thấy rằng mọi thứ có thể nhanh chóng vượt quá tầm kiểm soát và khiến chúng tôi gần như không thể tự mình xác thực số điện thoại nhập vào

May mắn thay, có một thư viện Python có thể giúp chúng ta vượt qua quá trình xác thực một cách dễ dàng và hiệu quả. Thư viện Số điện thoại Python có nguồn gốc từ thư viện

$ pip3 install Phonenumbers
7 của Google, thư viện này cũng có sẵn cho các ngôn ngữ lập trình khác như C++, Java và JavaScript

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách phân tích cú pháp, xác thực và trích xuất số điện thoại, cũng như cách trích xuất thông tin bổ sung từ [các] số điện thoại như chi tiết về nhà mạng, múi giờ hoặc trình mã hóa địa lý

Việc sử dụng thư viện rất đơn giản và nó thường được sử dụng như thế này

import phonenumbers
from phonenumbers import carrier, timezone, geocoder

my_number = phonenumbers.parse["+447986123456", "GB"]

print[phonenumbers.is_valid_number[my_number]]
print[carrier.name_for_number[my_number, "en"]]
print[timezone.time_zones_for_number[my_number]]
print[geocoder.description_for_number[my_number, 'en']]

Và đây là đầu ra

True
EE
['Europe/Guernsey', 'Europe/Isle_of_Man', 'Europe/Jersey', 'Europe/London']
United Kingdom

Hãy bắt đầu bằng cách thiết lập môi trường của chúng tôi và cài đặt thư viện

Cài đặt số điện thoại

Trước tiên, hãy tạo và kích hoạt môi trường ảo của chúng ta

Sau đó, chúng tôi cài đặt thư viện Python Phonenumbers

$ pip3 install Phonenumbers

Hướng dẫn này sẽ sử dụng phiên bản thư viện Phonenumbers của

import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
0

Bây giờ chúng ta đã sẵn sàng bắt đầu khám phá thư viện Số điện thoại

Phân tích số điện thoại bằng Python phonenumbers

Cho dù bạn nhận đầu vào của người dùng từ biểu mẫu web hay các nguồn khác, chẳng hạn như trích xuất từ ​​​​một số văn bản [thêm về điều đó sau trong hướng dẫn này], số điện thoại đầu vào rất có thể sẽ là một chuỗi. Ở bước đầu tiên, chúng tôi sẽ cần phân tích cú pháp bằng cách sử dụng

import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
1 và biến nó thành một phiên bản
import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
2 để chúng tôi có thể sử dụng nó để xác thực và thực hiện các chức năng khác

Chúng tôi có thể phân tích cú pháp số điện thoại bằng phương pháp

import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
3

import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]

Phương thức

import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
4 lấy một chuỗi số điện thoại làm đối số bắt buộc. Bạn cũng có thể chuyển thông tin quốc gia ở định dạng ISO Alpha-2 dưới dạng đối số tùy chọn. Lấy ví dụ, xem xét đoạn mã sau

my_number = phonenumbers.parse[my_string_number, "RO"]

"RO" là viết tắt của Romania ở định dạng ISO Alpha-2. Bạn có thể kiểm tra các mã quốc gia Alpha-2 và số khác từ trang web này. Trong hướng dẫn này, để đơn giản, tôi sẽ bỏ qua mã quốc gia ISO Alpha-2 trong hầu hết các trường hợp và chỉ đưa mã này vào khi thực sự cần thiết

Phương thức

import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
4 đã có một số quy tắc xác thực cơ bản tích hợp sẵn như độ dài của chuỗi số hoặc kiểm tra số 0 đứng đầu hoặc dấu hiệu
import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
6. Lưu ý rằng phương pháp này sẽ đưa ra một ngoại lệ khi bất kỳ quy tắc cần thiết nào không được đáp ứng. Vì vậy, hãy nhớ sử dụng nó trong khối thử/bắt trong ứng dụng của bạn

Bây giờ chúng tôi đã phân tích cú pháp số điện thoại của mình một cách chính xác, hãy tiến hành xác thực

Phonenumbers có hai phương pháp để kiểm tra tính hợp lệ của số điện thoại. Sự khác biệt chính giữa các phương pháp này là tốc độ và độ chính xác

Để giải thích chi tiết, hãy bắt đầu với

import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
7

import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_possible_number[my_number]]

Và đầu ra sẽ là

True

Bây giờ, hãy sử dụng cùng một số, nhưng lần này với phương thức

import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
8

import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_valid_number[my_number]]

Mặc dù đầu vào giống nhau, nhưng kết quả sẽ khác

False

Lý do là phương pháp

import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
7 đoán nhanh tính hợp lệ của số điện thoại bằng cách kiểm tra độ dài của số được phân tích cú pháp, trong khi phương pháp
import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
8 chạy xác thực đầy đủ bằng cách kiểm tra độ dài, tiền tố số điện thoại và vùng

Khi lặp qua một danh sách lớn các số điện thoại, sử dụng

my_number = phonenumbers.parse[my_string_number, "RO"]
1 sẽ cung cấp kết quả nhanh hơn so với
my_number = phonenumbers.parse[my_string_number, "RO"]
2. Nhưng như chúng ta thấy ở đây, những kết quả này có thể không phải lúc nào cũng chính xác. Có thể hữu ích để nhanh chóng loại bỏ các số điện thoại không tuân theo độ dài. Vì vậy, sử dụng nó có nguy cơ của riêng bạn

Trích xuất và định dạng số điện thoại bằng Python Phonenumbers

Đầu vào của người dùng không phải là cách duy nhất để lấy hoặc thu thập số điện thoại. Chẳng hạn, bạn có thể có một trình thu thập thông tin/trình thu thập dữ liệu sẽ đọc một số trang nhất định từ một trang web hoặc tài liệu và sẽ trích xuất các số điện thoại từ các khối văn bản. Nghe có vẻ là một bài toán khó nhưng may mắn thay, thư viện Số điện thoại chỉ cung cấp cho chúng ta chức năng chúng ta cần, với phương thức

my_number = phonenumbers.parse[my_string_number, "RO"]
3

my_number = phonenumbers.parse[my_string_number, "RO"]
4 lấy một khối văn bản và một vùng làm đối số rồi lặp lại để trả về kết quả phù hợp dưới dạng đối tượng
my_number = phonenumbers.parse[my_string_number, "RO"]
5

Hãy sử dụng

my_number = phonenumbers.parse[my_string_number, "RO"]
4 với một văn bản ngẫu nhiên

import phonenumbers

text_block = "Our services will cost about 2,200 USD and we will deliver the product by the 10.10.2021. For more information, you can call us at +44 7986 123456 or send an e-mail to [email protected]"

for match in phonenumbers.PhoneNumberMatcher[text_block, "GB"]:
    print[match]

Điều này sẽ in các số điện thoại phù hợp cùng với chỉ mục của chúng trong chuỗi

True
EE
['Europe/Guernsey', 'Europe/Isle_of_Man', 'Europe/Jersey', 'Europe/London']
United Kingdom
0

Bạn có thể nhận thấy rằng số của chúng tôi được định dạng theo định dạng quốc tế được tiêu chuẩn hóa và chia cho khoảng trắng. Điều này có thể không phải lúc nào cũng đúng trong các tình huống thực tế. Bạn có thể nhận được số của mình ở các định dạng khác, chẳng hạn như chia cho dấu gạch ngang hoặc được định dạng theo định dạng quốc gia [thay vì quốc tế]

Hãy thử nghiệm phương pháp

my_number = phonenumbers.parse[my_string_number, "RO"]
7 với các định dạng số điện thoại khác

True
EE
['Europe/Guernsey', 'Europe/Isle_of_Man', 'Europe/Jersey', 'Europe/London']
United Kingdom
1

Điều này sẽ xuất ra

True
EE
['Europe/Guernsey', 'Europe/Isle_of_Man', 'Europe/Jersey', 'Europe/London']
United Kingdom
2

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Mặc dù các số điện thoại được nhúng sâu vào văn bản với nhiều định dạng với các số khác, nhưng

my_number = phonenumbers.parse[my_string_number, "RO"]
4 vẫn trả về thành công các số điện thoại với độ chính xác cao

Ngoài việc trích xuất dữ liệu từ văn bản, chúng tôi cũng có thể muốn lấy từng chữ số từ người dùng. Hãy tưởng tượng rằng giao diện người dùng của ứng dụng của bạn hoạt động tương tự như điện thoại di động hiện đại và định dạng số điện thoại khi bạn nhập. Chẳng hạn, trên trang web của bạn, bạn có thể muốn chuyển dữ liệu tới API của mình với mỗi sự kiện

my_number = phonenumbers.parse[my_string_number, "RO"]
9 và sử dụng
import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_possible_number[my_number]]
0 để định dạng số điện thoại với mỗi chữ số đến

Vì phần giao diện người dùng nằm ngoài phạm vi của bài viết này nên chúng tôi sẽ sử dụng một ví dụ cơ bản cho

import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_possible_number[my_number]]
1. Để mô phỏng định dạng nhanh chóng, hãy chuyển sang trình thông dịch Python

True
EE
['Europe/Guernsey', 'Europe/Isle_of_Man', 'Europe/Jersey', 'Europe/London']
United Kingdom
3

Không phải tất cả đầu vào của người dùng xảy ra khi họ nhập. Một số biểu mẫu có các trường nhập văn bản đơn giản cho số điện thoại. Tuy nhiên, điều đó không nhất thiết có nghĩa là chúng tôi sẽ nhập dữ liệu ở định dạng chuẩn

Thư viện Số điện thoại cũng giúp chúng tôi trình bày ở đây bằng phương pháp

import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_possible_number[my_number]]
2. Phương pháp này cho phép chúng tôi định dạng số điện thoại thành ba định dạng tiêu chuẩn hóa nổi tiếng. Quốc gia, Quốc tế và E164. Các định dạng Quốc gia và Quốc tế khá dễ hiểu, trong khi định dạng E164 là định dạng số điện thoại quốc tế đảm bảo các số điện thoại được giới hạn ở 15 chữ số và được định dạng {+}{mã quốc gia}{số có mã vùng}. Để biết thêm thông tin về E164, bạn có thể kiểm tra trang Wikipedia này

Hãy bắt đầu với định dạng quốc gia

True
EE
['Europe/Guernsey', 'Europe/Isle_of_Man', 'Europe/Jersey', 'Europe/London']
United Kingdom
4

Điều này sẽ trả về một chuỗi số điện thoại cách đều nhau với định dạng quốc gia

True
EE
['Europe/Guernsey', 'Europe/Isle_of_Man', 'Europe/Jersey', 'Europe/London']
United Kingdom
5

Bây giờ, hãy thử định dạng số quốc gia theo định dạng quốc tế

Đoạn mã trên sẽ trả về một chuỗi số điện thoại cách đều nhau

True
EE
['Europe/Guernsey', 'Europe/Isle_of_Man', 'Europe/Jersey', 'Europe/London']
United Kingdom
6

Lưu ý rằng chúng ta đã chuyển

import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_possible_number[my_number]]
3 làm tham số thứ hai vào phương thức
import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
3. Vì số đầu vào là số quốc gia nên nó không có tiền tố mã quốc gia để gợi ý quốc gia. Trong những trường hợp này, chúng tôi cần chỉ định quốc gia có mã ISO Alpha-2 để có kết quả chính xác. Loại trừ mã quốc gia dạng số và mã ISO Alpha-2, sẽ dẫn đến ngoại lệ
import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_possible_number[my_number]]
5

Bây giờ, hãy thử tùy chọn định dạng

import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_possible_number[my_number]]
6. Chúng tôi sẽ chuyển một chuỗi quốc gia làm đầu vào

True
EE
['Europe/Guernsey', 'Europe/Isle_of_Man', 'Europe/Jersey', 'Europe/London']
United Kingdom
7

Đầu ra sẽ rất giống với

import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_possible_number[my_number]]
7, ngoại trừ khoảng trắng

True
EE
['Europe/Guernsey', 'Europe/Isle_of_Man', 'Europe/Jersey', 'Europe/London']
United Kingdom
8

Điều này rất hữu ích khi bạn muốn chuyển số cho API nền. Không có gì lạ khi các API mong đợi số điện thoại là các chuỗi không cách nhau

Nhận thông tin bổ sung về số điện thoại

Một số điện thoại được tải với dữ liệu về người dùng mà bạn có thể quan tâm. Bạn có thể muốn sử dụng các API hoặc điểm cuối API khác nhau tùy thuộc vào nhà cung cấp dịch vụ của số điện thoại cụ thể vì điều này đóng một vai trò trong giá thành sản phẩm. Bạn có thể muốn gửi thông báo khuyến mãi tùy thuộc vào múi giờ [số điện thoại] của khách hàng để bạn không gửi tin nhắn cho họ vào lúc nửa đêm. Hoặc bạn có thể muốn nhận thông tin về vị trí của số điện thoại để bạn có thể cung cấp thông tin liên quan. Thư viện Số điện thoại cung cấp các công cụ cần thiết để đáp ứng những nhu cầu này

Để bắt đầu với địa điểm, chúng ta sẽ sử dụng phương thức

import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_possible_number[my_number]]
8 từ lớp
import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_possible_number[my_number]]
9. Phương pháp này lấy một số điện thoại được phân tích cú pháp và một tên ngôn ngữ ngắn làm tham số

Hãy thử điều này với số giả trước đây của chúng tôi

True
EE
['Europe/Guernsey', 'Europe/Isle_of_Man', 'Europe/Jersey', 'Europe/London']
United Kingdom
9

Điều này sẽ in ra nước xuất xứ của số điện thoại

$ pip3 install Phonenumbers
0

Tên ngôn ngữ ngắn khá trực quan. Hãy thử để có được đầu ra bằng tiếng Nga

$ pip3 install Phonenumbers
1

Và đây là đầu ra cho biết Vương quốc Anh bằng tiếng Nga

$ pip3 install Phonenumbers
2

Bạn có thể dùng thử với các ngôn ngữ khác theo sở thích của mình như "de", "fr", "zh", v.v.

Như đã đề cập trước đó, bạn có thể muốn nhóm các số điện thoại của mình theo nhà cung cấp dịch vụ của họ, vì trong hầu hết các trường hợp, điều đó sẽ ảnh hưởng đến chi phí. Để làm rõ, thư viện Số điện thoại có thể sẽ cung cấp chính xác hầu hết các tên nhà mạng, nhưng không phải 100%

Ngày nay, ở hầu hết các quốc gia, bạn có thể lấy số của mình từ một nhà mạng và sau đó chuyển số đó sang nhà mạng khác, để lại số điện thoại giống hệt nhau. Vì Phonenumbers chỉ là một thư viện Python ngoại tuyến nên không thể phát hiện những thay đổi này. Vì vậy, tốt nhất là tiếp cận tên nhà cung cấp dịch vụ như một tài liệu tham khảo, thay vì thực tế

Chúng ta sẽ sử dụng phương thức

True
0 từ lớp
True
1

$ pip3 install Phonenumbers
3

Điều này sẽ hiển thị nhà cung cấp dịch vụ ban đầu của số điện thoại nếu có thể

$ pip3 install Phonenumbers
4

Ghi chú. Như được đề cập trong các tài liệu gốc của Số điện thoại Python, thông tin nhà cung cấp dịch vụ có sẵn cho các số điện thoại di động ở một số quốc gia, không phải tất cả

Một thông tin quan trọng khác về số điện thoại là múi giờ của nó. Phương thức

True
2 sẽ trả về danh sách các múi giờ mà số đó thuộc về. Chúng tôi sẽ nhập nó từ
True
3

$ pip3 install Phonenumbers
5

Điều này sẽ in các múi giờ sau

$ pip3 install Phonenumbers
6

Điều này kết thúc hướng dẫn của chúng tôi về Số điện thoại Python

Phần kết luận

Chúng tôi đã học cách phân tích cú pháp số điện thoại bằng phương pháp

import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
3, trích xuất số từ khối văn bản bằng
my_number = phonenumbers.parse[my_string_number, "RO"]
7, lấy số điện thoại theo từng chữ số và định dạng số đó bằng
import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_possible_number[my_number]]
0, sử dụng các phương pháp xác thực khác với
import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
7 và
import phonenumbers

my_string_number = "+40721234567"
my_number = phonenumbers.parse[my_string_number]
7, định dạng số bằng cách sử dụng
True
9,
import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_valid_number[my_number]]
0 và
import phonenumbers

my_string_number = "+40021234567"
my_number = phonenumbers.parse[my_string_number]
print[phonenumbers.is_possible_number[my_number]]
6

Hãy nhớ xem repo GitHub gốc của thư viện Số điện thoại. Ngoài ra nếu bạn có bất kỳ câu hỏi nào trong đầu, vui lòng bình luận bên dưới

Số điện thoại trong Python là gì?

Số điện thoại là thư viện Python mã nguồn mở được sử dụng để truy cập thông tin về số điện thoại . Nó cũng giúp xác thực số điện thoại, phân tích cú pháp số điện thoại, v.v.

Làm cách nào để cài đặt gói số điện thoại trong Python?

Mô-đun Số điện thoại của Python. Cài đặt . số điện thoại cài đặt pip .

Làm cách nào để xác minh số điện thoại di động bằng Python?

Xác thực bằng Python PhoneNumbers .
Trước tiên, bạn phải nhập thư viện số điện thoại. nhập số điện thoại
Tạo một biến, được gọi là string_phone_number. .
Sau đó, bạn cần phân tích cú pháp số điện thoại đã cho. .
Cuối cùng, bạn phải sử dụng phương thức is_possible_number[] để thực hiện xác thực

Số điện thoại đầu tiên là gì?

Nhiều nhà điều hành điện thoại bị ốm và không thể làm việc, vì vậy phương pháp thay thế là gọi trực tiếp cho một người qua số thuê bao duy nhất của họ. Thật thú vị, số điện thoại đầu tiên trên thế giới được công khai là “ 999 ”.

Chủ Đề