軟體測試--詳細判斷電話號碼

MrDevil發表於2023-03-26

軟體測試作業--電話號碼

本文章全手工,業務自我感覺還行,還缺少許多我不知道的業務,但大體的手機號碼和座機的大致路線都有,到手機地點的有一個例子,百度了許多文章才總結出來的。程式碼沒用什麼高階知識,勿噴,就是用了4個多小時完成的,從找資料到編寫基礎java程式碼,然後一一進行測試,分享出來,希望對大家有用。

一、作業要求

  1. 首先輸入1-15位。
  2. 要求判斷出電話號碼的型別。
  3. 對於座機,要求輸出座機號碼地點。
  4. 對於手機,要求輸出手機號碼的種類。
  5. 輸出增加手機的地點。(加分)
  6. 判斷國外的電話號碼。(加分)

二、需求分析

根據作業的要求,可以大致解析出下面5點需求,先去網上找資料,將需求逐一完善,對於軟體測試就是需要考慮盡肯能多的測試用例。

1、電話號碼型別

電話號碼可分為手機號碼和座機號碼。

  • 對國內的座機分析,暫時以0或8開頭的號碼為座機號碼,假定除去座機號碼,其它皆為手機號碼,在從手機號中細分即可。

  • 這裡分析不是很全面,展開來分析,是一個很大很大的工程量,這裡根據作業需求推動來進行。

2、座機號碼地點

座機格式:區號+電話號碼

中國大陸國際區號是86;香港特別行政區區號852;澳門特別行政區區號853;臺灣省區號886。

這裡我以江西省為例,其它的可以參考下 中國城市電話區號對照表。
新餘市 0790 南昌市 0791 九江市 0792 上饒市 0793 臨川市 0794
宜春市 0795 吉安市 0796 贛州市 0797 景德鎮 0798 萍鄉市 0799
鷹潭市 0701

->中國城市電話區號對照表

中國城市電話區號對照表 (buyiju.com)

<-

3、手機號碼的種類

常用運營商

中國移動號段:134(0-8)、135、136、137、138、139、147、150、151、152、157、158、159、172、178、182、183、184、187、188、195、197、198

中國聯通號段:130、131、132、145、155、156、166、175、176、185、186、196

中國電訊號段:133、149、153 、180 、181 、189、173、177、190、191、193、199

中國廣電號段:192

虛擬運營商號段

聯通:167、170(4,7,8,9)、171

電信:162、170(0,1,2)

移動:165、170(3,5,6)

物聯網號段

聯通:1400、146

電信:1410

移動:1440、148

衛星電話號段

電信:1349、174(00-05)

工信部應急通訊:174(06-12)

海事衛星通訊:1749

其它號段

電信服務服務號碼:10

國際對方付費電話:108

電信服務中心:10000

聯通服務中心:100001

特種開頭:11(如:110-報警、114-查號、119-火警)

民用特殊號碼:12(如:120-急救電話、121-天氣預報、122-交通事故告警)

4、手機地點

由於每一個地區都有自己的運營商,運營商下有獨特號段,舉一個地區都是很大的工程量。

這裡以江西省宜春市的中國移動182號段的一部分為例,其它的可以參考下 方的手機號段網。
1829640 1829641 1829650 1829651 1829652 1829653 1829654 1829655 1829656 1829657 1829658 1829659 1829694 1829695

->江西宜春手機號段

江西宜春手機號段大全 - 手機號段網 (uutool.cn)

<-

5、國外號碼

中國常用號碼 ---> 11位

美國、德國印度、瑞士、荷蘭、比利時、法國、澳大利亞等 ---> 10位

紐西蘭、泰國等 ---> 9位

新加坡 ---> 8位

加拿大 ---> 7位

6、測試用例

  1. 對格式驗證,輸入的是數字。
  2. 對號碼字數驗證,輸入的是1-15位。
  3. 對其它各種位數的號碼一一測試。
  4. 對正確的號碼驗證,臨界值等。

三、程式碼編寫

將上述需求依次用java程式碼在主類進行編寫,測試,因為只是作業,不是業務,就有點對使用者不友好性,沒輸到對應的格式就只好重新執行了,大體的手機號碼和座機的大致路線都有,百度了許多文章才總結出來的。

package softwaretest;

import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Pattern;

public class phoneTest {
    public static void main(String[] args) {
        /*
        * 1. 首先輸入1-15位
        * */
        Scanner sc =  new Scanner(System.in);
        System.out.println("          判斷電話號碼            ");
        System.out.print("請重新輸入"+"1-15"+"位電話號碼:");
        String str = sc.nextLine();
        for (int i = 0; i < str.length(); i++) {
            if(str.charAt(i) < '0' || str.charAt(i) > '9'){
                System.out.print("格式錯誤,輸入的不是數字");
                return;
            }else {
                continue;
            }
        }
        while (true){
            if(str.length() <= 1 || str.length() >= 15){//暗含判斷是否為空
                System.out.print("輸入的位數不符合,請重新輸入"+"1-15"+"位電話號碼:");
                str = sc.nextLine();
            } else {
                break;
            }
        }
        /*
        * 2.要求判斷出電話號碼的型別。
        * 電話號碼可分為手機號碼和座機號碼
        * */
        //座機號碼--以0或8開頭--僅僅分析國內
        if(str.charAt(0) == '0'){ // 0開頭是國內省份
            String s = str.substring(0,4);
            /*
            * 3.對於座機,要求輸出座機號碼地點。
            * */
                switch (s){
                    case "0790":
                        System.out.println("江西省新餘市");
                        return;
                    case "0791":
                        System.out.println("江西省南昌市 ");
                        return;
                    case "0792":
                        System.out.println("江西省九江市 ");
                        return;
                    case "0793":
                        System.out.println("江西省上饒市 ");
                        return;
                    case "0794":
                        System.out.println("江西省臨川市 ");
                        return;
                    case "0795":
                        System.out.println("江西省宜春市");
                        return;
                    case "0796":
                        System.out.println("江西省吉安市");
                        return;
                    case "0797":
                        System.out.println("江西省贛州市");
                        return;
                    case "0798":
                        System.out.println("江西省景德鎮");
                        return;
                    case "0799":
                        System.out.println("江西省萍鄉市 ");
                        return;
                    case "0701":
                        System.out.println("江西省鷹潭市");
                        return;
                    default:
                        System.out.println("其它省份還在開發中……");
                        return;
            }
        } else if (str.charAt(0) == '8') { // 8開頭的是國際區號或行政區或臺灣省
            if (str.charAt(1)  == '6') {
                System.out.println("中國國際區號");
                return;
            }
            String s = str.substring(0, 3);
            switch (s) {
                case "852":
                    System.out.println("香港特別行政區");
                    return;
                case "853":
                    System.out.println("澳門特別行政區");
                    return;
                case "886":
                    System.out.println("臺灣省");
                    return;
                default:
                    System.out.println("沒有該省份的號碼");
                    return;
            }
        }

        /*
        * 4. 對於手機,要求輸出手機號碼的種類。
        *    標準的手機號
        * */
        if(str.length() == 11) {
            //手機號碼--以1開頭
            if (str.charAt(0) == '1') {
                String s = str.substring(0, 3);
//                中國移動特殊第4位數
                if ("134".equals(s)) {
                    for (int i = 0; i < 9; i++) {
                        if (str.charAt(3) == i + '0') {
                            System.out.println("中國移動");
                            return;
                        }
                    }
                }
//           移動運營商
                String a[] = {"135", "136", "137", "138", "139", "147", "150", "151", "152", "157", "158", "159", "172", "178", "182", "183", "184", "187", "188", "195", "197", "198"};
//           江西省宜春市的中國移動182號段
                String b[] = {"9640", "9641", "9650", "9651", "9652", "9653", "9654", "9655", "9656", "9657", "9658", "9659", "9694", "9695"};
                String s1 = str.substring(3, 7);
                for (int i = 0; i < a.length; i++) {
                    if (a[i].equals(s)) {
                        if (s.equals("182")) {
                            /*
                            * 5.手機地點僅僅以江西省宜春市的中國移動182號段為例
                            * */
                            for (int j = 0; j < b.length; j++) {
                                if (b[j].equals(s1)) {
                                    System.out.println("中國移動 江西省宜春市");
                                    return;
                                }
                                if(j == b.length - 1){
                                    System.out.println("中國移動");
                                    return;
                                }
                            }
                        } else {
                            System.out.println("中國移動");
                            return;
                        }
                    }
                }
//                中國聯通
                String c[] = {"130", "131", "132", "145", "155", "156", "166", "175", "176", "185", "186", "196"};
                for (int i = 0; i < c.length; i++) {
                    if(c[i].equals(s)){
                        System.out.println("中國聯通");
                        return;
                    }
                }

//                中國電信
                String d[] = {"133","149","153 ","180 ","181 ","189","173","177","190","191","193","199"};
                for (int i = 0; i < d.length; i++) {
                    if(d[i].equals(s)){
                        System.out.println("中國電信");
                        return;
                    }
                }

                String s2 = str.substring(0, 4);

//                虛擬運營商
//                中國聯通虛擬運營商
                if(s.equals("167") || s.equals("171") || s2.equals("1704") || s2.equals("1707") || s2.equals("1708") || s2.equals("1709")){
                    System.out.println("中國聯通虛擬運營商");
                    return;
                }
//                中國電信虛擬運營商
                if(s.equals("162") || s2.equals("1700") || s2.equals("1701") || s2.equals("1702")){
                    System.out.println("中國電信虛擬運營商");
                    return;
                }
//                中國移動虛擬運營商
                if(s.equals("165") || s2.equals("1703") || s2.equals("1705") || s2.equals("1706")){
                    System.out.println("中國移動虛擬運營商");
                    return;
                }

//                物聯網號段
//                中國聯通虛擬運營商
                if(s.equals("146") || s2.equals("1400")){
                    System.out.println("中國聯通虛擬運營商");
                    return;
                }
//                中國移動虛擬運營商
                if(s.equals("148") || s2.equals("1440")){
                    System.out.println("中國移動虛擬運營商");
                    return;
                }
//                中國電信虛擬運營商
                if(s2.equals("1410")){
                    System.out.println("中國電信虛擬運營商");
                    return;
                }

                String s3 = str.substring(0,5);

//                電信衛星電話
                if(s3.equals("17400") || s3.equals("17401") || s3.equals("17402") || s3.equals("17403") || s3.equals("17404") || s3.equals("17405") || s2.equals("1349")){
                    System.out.println("電信衛星電話");
                    return;
                }

//                工信部應急衛星通訊電話
                if(s3.equals("17406") || s3.equals("17407") || s3.equals("17408") || s3.equals("17409") || s3.equals("17410") || s3.equals("17411") || s3.equals("17412")){
                    System.out.println("工信部應急衛星通訊電話");
                    return;
                }

//                海事衛星通訊電話
                if(s2.equals("1749")){
                    System.out.println("海事衛星通訊電話");
                    return;
                }

                System.out.println("其它手機號有待完善...");
                return;
            }else {
                System.out.print("根據您輸入的,可以判斷是判斷手機號,但格式輸入錯誤");
                return;
            }
        }

        /*
        * 6.判斷國外的電話號碼
        * */
        /*
         * 電話號碼位數為10
         * */
        if(str.length() == 10){
            System.out.println("美國、德國印度、瑞士、荷蘭、比利時、法國、澳大利亞等");
            return;
        }

        /*
         * 電話號碼位數為9
         * */
        if(str.length() == 9){
            System.out.println("紐西蘭、泰國等 ");
            return;
        }

        /*
         * 電話號碼位數為8
         * */
        if(str.length() == 8){
            System.out.println("新加坡");
            return;
        }
        if(str.length() == 8){
            System.out.println("加拿大");
            return;
        }

        /*
        * 電話號碼位數為3
        * */
        if(str.length() == 3){
            String s = str.substring(0,3);
//                民用特殊號碼
            if(s.equals("120")){
                System.out.println("急救電話");
                return;
            }
            if(s.equals("121")){
                System.out.println("天氣預報");
                return;
            }
            if(s.equals("122")){
                System.out.println("交通事故告警");
                return;
            }

//        特種開頭
            if(s.equals("110")){
                System.out.println("報警");
                return;
            }
            if(s.equals("114")){
                System.out.println("查號");
                return;
            }
            if(s.equals("119")){
                System.out.println("火警");
                return;
            }

//        國際對方付費電話
            if(s.equals("108")){
                System.out.println("國際對方付費電話");
                return;
            }
        }

        /*
         * 電話號碼位數為2
         * */
        if(str.length() == 2){
            String s2 = str.substring(0,2);
//        電信服務服務號碼
            if(s2.equals("10")){
                System.out.println("電信服務服務號碼");
                return;
            }
        }

        /*
         * 電話號碼位數為5
         * */
        if(str.length() == 5){
            String s3 = str.substring(0,5);
//        電信服務中心
            if(s3.equals("10000")){
                System.out.println("電信服務中心");
                return;
            }
        }

        /*
         * 電話號碼位數為6
         * */
        if(str.length() == 6){
            String s4 = str.substring(0,6);
//        聯通服務中心
            if(s4.equals("100001")){
                System.out.println("聯通服務中心");
                return;
            }
        }

        System.out.println("其它號碼還未完善...");
        return;
    }
}

記錄每一個學習瞬間

相關文章