/// <summary>
        /// 获取指写号码所属号段
        /// </summary>
        /// <param name="strPhone"></param>
        /// <param name="pPhoneSection"></param>
        /// <returns></returns>
        private int GetPhoneSectionNum(string strPhone, Dictionary <string, int> pPhoneSection)
        {
            //判断是否有非法字符
            if (!DataVerify.IsNumber(strPhone))
            {
                return(-1);
            }
            int iLen = strPhone.Length;

            if (iLen > 12 || iLen < 11)
            {
                return(-1);
            }
            string strHeader = strPhone.Substring(0, 3);

            try
            {
                char[] charArray = strPhone.ToCharArray();
                if (0x30 == charArray[0])     //第一位是0
                {
                    if (0x30 == charArray[1]) //第二位也是0
                    {
                        return(-1);
                    }
                    else if (0x31 == charArray[1] && 0x30 != charArray[2]) //第二位是1,但是第三位不是0
                    {
                        return(-1);
                    }
                    else
                    {
                        if (iLen < 10 || iLen > 12)
                        {
                            return(-1);//错误
                        }
                        else
                        {
                            return(6);  //小灵通
                        }
                    }
                }
                if (0x31 == charArray[0] && 11 == iLen) //手机号
                {
                    //匹配手机号段
                    if (pPhoneSection.ContainsKey(strHeader))
                    {
                        return(pPhoneSection[strHeader]);
                    }
                    else
                    {
                        return(-1);
                    }
                }
                else
                {
                    return(-1);
                }
            }
            catch
            {
            }
            return(-1);
        }
        /// <summary>
        /// 对外的信息发送接口
        /// </summary>
        /// <param name="strUserID"></param>
        /// <param name="strPwd"></param>
        /// <param name="strPhone"></param>
        /// <param name="strMsg"></param>
        /// <param name="strSubport"></param>
        /// <returns></returns>
        public string SendMessage(string strUserID, string strPwd, string strPhone, string strMsg, string strSubport)
        {
            //此处传进来的参数已经经过了空参数与非法参数的检查
            if (string.IsNullOrEmpty(strUserID) ||
                string.IsNullOrEmpty(strPwd) ||
                string.IsNullOrEmpty(strPhone) ||
                string.IsNullOrEmpty(strMsg))
            {
                return("-1");  //参数为空
            }
            //验证账号密码、子端口格式
            if (!DataVerify.IsIllegalUser(strUserID) || !DataVerify.IsIllegalUser(strPwd))
            {
                return("-2");    //账号或者密码非法
            }
            else if (!string.IsNullOrEmpty(strSubport))
            {
                if (!DataVerify.IsNumber(strSubport) || strSubport.Length > 6)
                {
                    return("-3");    //子端口格式非法
                }
                //strSubport = "";
            }
            //获取用户信息,判断密码是否正确
            SmsUserData objUser = new SmsUserData();

            DataCache.GetCacheUser(strUserID, strPwd, ref objUser);
            if (object.Equals(null, objUser))
            {
                //用户名或密码错误
                return("-11");
            }
            //判断账号是否被禁用
            if (objUser.Status == 1)//账号被禁用,0正常,1禁用
            {
                return("-12");
            }
            //如果余额已经小于等于0
            if (objUser.Balance <= 0)
            {
                return("-15");   //余额不足
            }
            //判断信息内容是否超长[加上签名后的],也就是说可以发的长度是设置长度减去签名长度
            int iMsgLen = 0;

            strMsg  = strMsg + objUser.SignStr.Trim();
            iMsgLen = strMsg.Length;
            if (iMsgLen > objUser.MaxLen)
            {
                return("-13");
            }
            //判断是否有非法关键词
            if (objUser.IsCheckIllegal == 1)   //需要检测非法关键词
            {
                if (IsContainIllegal(strMsg))
                {
                    return("-14");
                }
            }
            string[] strPhoneArray = strPhone.Split(',');
            if (strPhoneArray.Length > objUser.MaxCount)
            {
                return("-16"); //发送号码数太多
            }
            if (strPhoneArray.Length < objUser.MinCount)
            {
                return("-17"); //发送号码数太少
            }
            SmsMsgSendStr objMsg = new SmsMsgSendStr();

            GetPhoneList(strPhoneArray, objUser, objMsg);
            //获取通道信息
            if (!GetSpgateInfo(objUser, objMsg))
            {
                return("-18");   //有通道未绑定
            }
            //获取信息拆分结果
            GetSpliteMsg(objUser, objMsg, strMsg);
            //计算扣费数
            int iTotalCount = ComputeTotalFee(objUser, objMsg);//进行扣费处理,此处难在信息的拆分上[计算一条信息要扣多少条]

            if (iTotalCount == 0)
            {
                return("-19");     //无有效号码
            }
            //验证完毕,扣余额。开始发送,如果余额不足,则不扣,在存储过程中扣费
            if (!new SmsUser().UpdateBalance(strUserID, iTotalCount))
            {
                return("-15");  //扣除余额失败,余额不足
            }
            //发送
            SendMessage(objUser, objMsg, strSubport, iTotalCount);
            return("1");
        }