В практических проектах проверка телефонных номеров является очень частым требованием. Я искал библиотеку проверки с открытым исходным кодом в Интернете, но не нашел удовлетворительной работы. Они либо проверяют, что условия старые и не подходят для развития времени, либо проверяют, что условия слишком мертвы и не благоприятны для новых чисел, которые могут появиться в будущем. Итак, я решил построить свои собственные колеса.
План номеров телекоммуникационных сетей (выпуск 2017 г.)
После нескольких поисков я нашел официальную организацию, которая управляет китайским номером телефона中国工信部
, на его дочерних сайтахИнтегрированная система управления ресурсами телекоммуникационного бизнеса, Я нашелПлан нумерации телекоммуникационных сетей (издание 2017 г.). План содержит следующую ключевую информацию:
Структура номера
Фиксированный сетевой номер телефона
телефонный номер фиксированной сети моей страны принимает структуру кода междугородной сети, а именно:
国家码(86)+ 长途区号 + 本地用户号码
В телефонных номерах фиксированной сети используется неравнозначная нумерация, а максимальная длина цифры действительных внутренних номеров составляет11
кусочек. Общая длина цифр локального номера пользователя7/8
биты сосуществуют.
номер мобильного телефона
телефонный номер мобильной сети моей страны принимает структуру сетевого номера, а именно:
国家码(86)+ 网号 + HLR 识别号(H0H1H2H3)+ 用户号码(ABCD)
Номер телефона общедоступной мобильной сети3
цифра, используя равнозначное число, длина цифры внутреннего действительного номера составляет11
кусочек.
Назначение сегмента номера
первый1
первый1
В принципе, этот номер следует использовать как единый национальный номер, и его можно разделить на业务号码
а также用户号码
. Его план таков:
первый2~8
первый2~8
Номер - это номер, используемый в локальной сети, в основном используемый в качестве номера пользователя фиксированной местной телефонной сети. Часть первая2~8
Этот номер также используется в качестве кода доступа к национальным и провинциальным интеллектуальным службам.
первый9
92
а также98
номер сегментапланированиеиспользуется для公众移动通信网
Номер телефона с одинаковым номером, длина действительного номера в Китае:11
бит и активировать его в надлежащее время в зависимости от ситуации. другой первый9
Номер для национального бизнеса или резервного копирования.
Фиксированная телефонная сеть моей страны междугородний код
Длина кода города2~3
бит, а первый бит не0
.
Аутентифицируйте китайские мобильные и стационарные номера с помощью JavaScript
Основываясь на приведенной выше информации, я написал следующий номер телефона для обычной проверки:
Примечание:В строгом режиме проверки мобильного номера используется сегмент номера, как описано в приведенном выше плане.公众移动通信网网号
, не гарантирует, что он открыт для работы операторами связи.
Тип номера | расслабленный режим | строгий режим |
---|---|---|
мобильный телефон | Упрощенная проверка сегмента номера:/^1[3-9][0-9]{9}$/
|
Более строгая проверка сегмента номера:/^1(?:3[0-9]|4[5-9]|5[0-9]|6[12456]|7[0-8]|8[0-9]|9[0-9])[0-9]{8}$/
|
стационарный | Необязательный код города:/^(?:0[1-9][0-9]{1,2}-)?[2-8][0-9]{6,7}$/
|
Требуется код города:/^0[1-9][0-9]{1,2}-[2-8][0-9]{6,7}$/
|
и опубликованоis-chinese-phone-numberМешок:
Установить
# yarn
yarn add is-chinese-phone-number
# or, npm
npm i is-chinese-phone-number
CDN:jsDelivr | UNPKG(Доступно через глобальные переменныеisChinesePhoneNumber
использовать)
использовать
Подтвердить номер телефона в Китае
грамматика:
isChinesePhoneNumber(phoneNumber: string | number, strict: boolean = false): boolean
Пример:
isChinesePhoneNumber('10086') // ==> false
isChinesePhoneNumber('18087030020') // ==> true
isChinesePhoneNumber('010-88888888') // ==> true
Подтвердить номер мобильного телефона в Китае
грамматика:
isChinesePhoneNumber.mobile(phoneNumber: string | number, strict: boolean = false): boolean
Пример:
isChinesePhoneNumber.mobile('10086') // ==> false
isChinesePhoneNumber.mobile('18087030020') // ==> true
isChinesePhoneNumber.mobile('010-88888888') // ==> false
Подтвердить номер стационарного телефона в Китае
грамматика:
isChinesePhoneNumber.landline(phoneNumber: string | number, strict: boolean = false): boolean
Пример:
isChinesePhoneNumber.landline('10086') // ==> false
isChinesePhoneNumber.landline('18087030020') // ==> false
isChinesePhoneNumber.landline('010-88888888') // ==> true