WPF的查询电话的所属省份

作者:孙英鹏  撰写时间:2019年8月17日

今天要讲的是我在做项目的时候无意间想到的无聊东西,就是输入电话号码,然后会把电话号码的所属省份显示出来。关于这个这么做的,我们来看一下。

输入电话到第7的时候,下面的省份输入框会自动出现电话的所属省份。(在网上的电话省份资料是7位的)

效果:
在这里插入图片描述

第一步:打开Visual Studio 2015,创建一个窗口页面,在窗口页面里把页面设计好,设计好之后在电话TextBox里面给一个事件和输入数字的限制代码就行了。(在国内我们的电话号码是11位的,所以就要限制输入数字,如果不限制输入数字,那输入进去的电话就不正确了,那么就不符合国内的电话,是属于假电话。)

代码:

  <TextBlock Text="本人电话:" Padding="5" Grid.Row="3" Grid.Column="1"  HorizontalAlignment="Right" />
  <TextBox Grid.Column="2" Grid.Row="3" x:Name="P_Number" Padding="4" TextChanged="P_Number_TextChanged" MaxLength="11"/>

第二步:首先创建一个类用来装电话的所在省份和前7位号码和根据号码获得省份的内容,关于电话的省份和前7位号码是我在网上找来的,所以我也是搬过来用的,你们就上网找代码。现在再来说一下根据前7位号码获得身份证地址,首先是判断一下是否输入到7位号码,然后在获取电话的省份和号码就行了。

代码:

    /// <summary>
    /// 获取电话省份
    /// </summary>
    private static void LoadSfzHashTable()
    {
        _Sfz.Add("1511820", "广东省东莞市");
        _Sfz.Add("1511821", "广东省东莞市");
    }

    /// <summary>
    /// 根据号码获得省份
    /// </summary>
    /// <param name="Numb6">身份证前6位</param>
    /// <returns></returns>
    public static string LoadAddress(string p_Numb7)
    {
        if (p_Numb7.Length == 7)
        {
            if (_Sfz.Count == 0) LoadSfzHashTable();

            object _Address = _Sfz[p_Numb7];
            if (_Address == null) return "";
            return _Address.ToString();
        }
        return "";
    }

第三步:在事件里头编写验证联系电话是否正确的验证代码。首先我们先认识一下我们国内手机号码的规则,如果不认识国内手机号码的规则,是无法编写正确的代码和了解验证国内手机号码规则的知识。(关于这些国内手机号码的规则是老师找来的,我只是借鉴一下老师代码,如果你不喜欢也可以自己上网找。)
首先前3位为网络识别号,第4-7位为地区编码,第8-11位为用户号码,我们来看一下国内三大电话运营商前三位数字是什么?
移动:134 135 136 137 138 139 147 148 150 151 152 157 158 159 172 178 182 183 184 187 188 198。
联通:130 131 132 145 146 155 156 166 171 175 176 185 186
电信:133 149 153 173 174 177 180 181 189 199
虚拟运营商:170
看完之后把所有的电话号码整理一遍,就是为后面所用到的正则表达式所做铺垫。
整理的号码:
130~139、14[5-9]、15[012356789]、166、17[0-8]、18[0-9]、19[8-9]。
整理完之后就开始编写代码。首先写验证电话是否正确,
首先获取控件输入值,长度到达11的时候进行判断,在判断里头写上调用正则表达式验证号码的准确性和使用正则表达式判断是否匹配,不匹配就弹出提示框提示手机号格式不对,请重新输入!并且清空输入框,输入正确就行了,然后在下面再写一个判断,当输入到第七位数字是,如果输错就提示错误,重置输入框,否则就显示电话的所属省份。

代码:

    /// <summary>
    /// 电话验证
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void P_Number_TextChanged(object sender, TextChangedEventArgs e)
    {
        try
        {
            string strDH = P_Number.Text.Trim();
            //(1)验证电话准确性
            if (strDH.Length == 11)
            {
                if (!Regex.IsMatch(strDH, @"^0?(13[0-9]|14[5-9]|15[012356789]|166|17[0-8]|18[0-9]|19[89])[0-9]{8}$"))
                {
                    MessageBox.Show("电话不合法!");
                    P_Number.Text = "";
                }
            }
            else if (P_Number.Text.ToString().Length == 7)
            {
                string strAddress = CheckIDCardGetDiQu.LoadAddress(P_Number.Text.ToString());
                if (strAddress == "")
                {
                    MessageBox.Show("电话不合法!");
                    //错误时,重置查询框
                    P_Number.Text = "";
                }
                else
                {
                    //联系地址
                    P_SFName.Text = strAddress;
                }
            }
        }
        catch (Exception)
        {

            throw;
        }
    }
变分模态分解(Variational Mode Decomposition, VMD)是一种强大的非线性、无参数信号处理技术,专门用于复杂非平稳信号的分析与分解。它由Eckart Dietz和Herbert Krim于2011年提出,主要针对传统傅立叶变换在处理非平稳信号时的不足。VMD的核心思想是将复杂信号分解为一系列模态函数(即固有模态函数,IMFs),每个IMF具有独特的频率成分和局部特性。这一过程与小波分析或经验模态分解(EMD)类似,但VMD通过变分优化框架显著提升了分解的稳定性和准确性。 在MATLAB环境中实现VMD,可以帮助我们更好地理解和应用这一技术。其核心算法主要包括以下步骤:首先进行初始化,设定模态数并为每个模态分配初始频率估计;接着采用交替最小二乘法,通过交替最小化残差平方和以及模态频率的离散时间傅立叶变换(DTFT)约束,更新每个模态函数和中心频率;最后通过迭代优化,在每次迭代中优化所有IMF的幅度和相位,直至满足停止条件(如达到预设迭代次数或残差平方和小于阈值)。 MATLAB中的VMD实现通常包括以下部分:数据预处理,如对原始信号进行归一化或去除直流偏置,以简化后续处理;定义VMD结构,设置模态数、迭代次数和约束参数等;VMD算法主体,包含初始化、交替最小二乘法和迭代优化过程;以及后处理,对分解结果进行评估和可视化,例如计算每个模态的频谱特性,绘制IMF的时频分布图。如果提供了一个包含VMD算法的压缩包文件,其中的“VMD”可能是MATLAB代码文件或完整的项目文件夹,可能包含主程序、函数库、示例数据和结果可视化脚本。通过运行这些代码,可以直观地看到VMD如何将复杂信号分解为独立模态,并理解每个模态的物理意义。 VMD在多个领域具有广泛的应用,包括信号处理(如声学、振动、生物医学信号分析)、图像处理(如图像去噪、特征提取)、金融时间序列分析(识
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值