具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获 得的所有其他实施例,都属于本发明保护的范围。
如图1所示为本发明输入长串数字的方法实施例一的流程图,包括:
步骤101、接收网络侧发送的要求输入目标长串数字的请求消息。例如,用户使用移动终端使用电话银行时,目标长串数字就是银行卡号;用户在咨询客服时,目标长串数字就是身份证号码。
步骤102、提取出预先存储的目标长串数字。
步骤103、将提取出的目标长串数字转换成双音多频(Dual ToneMulti-Frequency,简称DTMF)信号。
步骤104、将DTMF信号发送给网络侧。网络侧的DTMF解码模块在收到的DTMF信号中检测按键或数字信息的存在性,从而能够确定移动终端发送的长串数字。
其中,目标长串数字可以是身份证号码、银行卡号或者充值卡卡号等。
在使用移动终端进行通话的过程中,如果移动终端接收到网络侧发送的要求输入银行卡号的请求消息,则移动终端可以提取出自身预先存储的银行卡号,把该银行卡号转换成DTMF信号,这样移动终端的用户只需要选出预先存储的目标长串数字,移动终端就可以自动将该目标长串数字转换成DTMF信号发送出去,而无需移动终端的用户逐个输入长串数字。
本发明实施例一提供的方法,接收到网络侧发送的要求输入目标长串数字的请求后,提取出预先存储的目标长串数字,并将该目标长串数字转换成双音信号,无需用户记忆长串数字,便于用户使用业务。
步骤102具体可以包括如下步骤:
步骤1021、提取出预先存储的各组长串数字。
步骤1022、将各组长串数字显示给用户。
步骤1023、接收选择指令,该选择指令用于从各组长串数字中选择出目标长串数字。
步骤1024、根据选择指令,从各组长串数字中提取出目标长串数字。
其中,步骤1021具体可以包括:
步骤1021a、遍历预先存储的字符,判断每个字符是否是美国信息标准交换标准代码(American Standard Code for Information Interchange,简称ASCII)中的数字。
步骤1021b、提取连续排列的n个以上的长串数字。
步骤1021c、将提取出的连续排列的n个以上的数字封装成一组长串数字;以此类推,直到提取出预先存储的各组长串数字。
如果用户预先将长串数字存储在记事本中,用户可能不只存储数字,还可能包括文字、字母、标点以及空格等,提取预先存储的各组长串数字的时候,需要遍历用户存储的多个字符,从中提取出符合长度的长串数字。用户存储的字符可以如表一所示。
表一、用户预先存储的字符
银行卡号:3526768542065528 密码:88888888 |
表一中,前4个是文字,不需要提取。第5个字符是冒号,不需要提取。第6个字符是空格,不需要提取。第7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22个字符是数字,第23个字符是空格,并且16个数字连续排列,假设n=3,则这16个数字需要提取出来,将这16个数字组成一组长串数字,该组长串数字的内容就是3526768542065528,将这组长串数字的内容显示给用户。
继续遍历表一中的各个字符,第24、25个字符是文字,第26个字符是冒号,这三个字符都不需要提取。第27、28、29、30、31、32、33、34个字符是数字,这8个数字连续排列,这8个数字需要提取出来,将这8个数字组成一组长串数字,该组长串数字的内容就是88888888,将该组长串数字的内容显示给用户。
将这两组长串数字均显示给用户后,可以由用户选择一个数组。
由于移动终端提取出的长串数字有多组,用户可以通过按键发送选择指令给移动终端,通知移动终端所选择的目标长串数字。移动终端在接收到用户选择指令后,可以从各组长串数字中选择出目标长串数字,将该目标长串数字转换成DTMF信号。具体地,可以采用AT命令(Attention Command)将目标长串数字转换成DTMF信号。本发明实施例中,AT命令是用于控制移动终端的调制解调器命令,实现移动终端与网络侧的交互。一个DTMF信号由两个频率的音频信号叠加构成。这两个音频信号的频率来自两组预分配的频率组:行频组或列频组。每一对这样的音频信号唯一表示一个数字或符号。如表二所示为本发明实施中涉及到的DTMF信号和数字的对应关系。
表二、本发明实施例中涉及到的DTMF信号和数字的对应关系
步骤103是本发明显著区别于现有技术的一个步骤。现有技术中,用户使用移动终端输入长串数字时,逐个输入数字,移动终端将各个数字分别转换成DTMF信号发送出去。本发明实施例中,移动终端将提取出的目标长串数字转换成DTMF信号,而不是将用户逐个输入的数字转换成DTMF信号。
如下这段是用C语言编写的用于提取长串数字的一个程序的例子。
void UExtractNumber(MFWChar_c*content_cp,PBMultiRecipientList_s
*telNumberList_sp)
{
U16 curlength=0;//满足条件的数字长度,相当于本申请前文描
述的n
U16 i_loop;
U16 k_loop;
U8 isRepeat=FALSE;
MFWChar_c temp_num[SMS_EXTRACT_NUM_LEN_MAX];//存放
每次满足条件的数字
MFWChar_c *src_uni_ps=(MFWChar_c*)PNULL;
PBMultiRecipientList_s*recipientList_sp=telNumberList_sp;
PBMultiRecipientItem_s*item_sp=telNumberList_sp->item_sp;
U16 srclen=mfwStrLength(content_cp);/*获得content_cp中字符的长度
*/
memset(temp_num,′\0′,
SMS_EXTRACT_NUM_LEN_MAX*sizeof(MFWChar_c));
src_uni_ps=content_cp;
for(i_loop=0;i_loop<=srclen;i_loop++,src_uni_ps++)
{
/*判断Unicode是否是AscII中的数字*/
if(smsUIsDigit(*src_uni_ps))
{
if(curlength<SMS_EXTRACT_NUM_LEN_MAX)
{
temp_num[curlength]=*src_uni_ps;
++curlength;
}
}
else
{
/*curlength的长度必须要最小3位,最大40位!最多只能提
取内容中的10组数字*/
if((SMS_EXTRACT_NUM_LEN_MIN<=curlength)&&
(curlength<SMS_EXTRACT_NUM_LEN_MAX))
{
recipientList_sp->item_sp=item_sp;
if(recipientList_sp->count_n<
SMS_EXTRACT_MAX_NUMBERS)
{
for(k_loop=0;k_loop<recipientList_sp->count_n;
k_loop++)
{
if(!mfwStrCmp(recipientList_sp->item_sp->number_cp,temp_num))
{
isRepeat=TRUE;
break;
}
recipientList_sp->item_sp =
recipientLisT_sp->item_sp->next_sp;
}
recipientList_sp->item_sp=item_sp;
if(FALSE==isRepeat)
{
pbUInsertRecipient((MFWChar_c*)PNULL,
temp_num,
PB_INVALID_LOC,
recipientList_sp);
}
else
{
isRepeat=FALSE;
}
}
else
{
break;
}
}
/*把不满足条件的curlength清空*/
for(;curlength>0;curlength--)
{
temp_num[curlength-1]=chNull_c;
}
}
}
}
如下这段是用C语言编写的用于提取出的目标长串数字转换成DTMF信号的的程序的例子。
This function to organize BAT command:AT+VTS
param digit digit to be sent as DTMF
param mode mode of send DTMF
return if BAT command send ok,then return TRUE,else return FALSE
*/
static BOOL mbk_adp_bat_vts(T_BAT_VAL_percent_vts_mode mode,U8
digit)
{
#if!defined(WIN32)
//T_BAT_return result =
BAT_ERROR; //T_BAT_client clnt_hndl=
BAT_CONTROL_CHANNEL;T_BAT_cmd_set_percent_vts my_cmd_vts;
T_BAT_cmd_send my_bat_cmd_send;
//char tmp_str[83];
TRACE_FUNCTION(″mbk_adp_bat_vts()″);
if(TRUE EQ adp_dtmf_sent.startDtmf_b &&
BAT_P_VTS_MODE_START EQ adp_dtmf_sent.mode)
{
if(digit NEQ adp_dtmf_sent.digit‖BAT_P_VTS_MODE_STOP NEQ
mode)
{
TRACE_FUNCTION(″mbk_adp_bat_vts(),should send stop
dtmf″);
adp_dtmf_resend_queued.startDtmf_b =
(BAT_P_VTS_MODE_START==mode)?TRUE:FALSE;
adp_dtmf_resend_queued.digit=digit;
adp_dtmf_resend_queued.mode=BAT_P_VTS_MODE_START;
digit=adp_dtmf_sent.digit;
mode=BAT_P_VTS_MODE_STOP;
}
}
//clnt_hndl=mbk_adp_get_ccss_client();
memset(&my_cmd_vts,0,sizeof(my_cmd_vts));
my_bat_cmd_send.ctrl_params=BAT_CMD_SET_PERCENT_VTS;
my_bat_cmd_send.params.ptr_set_percent_vts=&my_cmd_vts;
my_cmd_vts.dtmf=(T_BAT_dtmf)digit;
my_cmd_vts.mode=(T_BAT_percent_vts_mode)mode;
//sprintf(tmp_str,″vts mode=%d,vts digit=%d″,mode,digit);
TRACE_EVENT_P2(″vts mode=%d,vts digit=%d″,mode,digit);
if(!cc_bat_send(&my_bat_cmd_send))
return FALSE;
//TRACE_EVENT(″cc_bat_send percentVTS successful″);
adp_dtmf_sent.valid=TRUE;
adp_dtmf_sent.mode=mode;
adp_dtmf_sent.digit=digit;
adp_dtmf_sent.startDtmf_b=(BAT_P_VTS_MODE_START==mode)?
TRUE:FALSE;//mbk_adp_cur_cc_cmd=my_bat_cmd_send.ctrl_params;
return TRUE;
#endif
}
各组长串数字可以存储在移动终端的各个存储模块中,例如可以存储在用户存储“记事本”或者“电话簿”的存储模块中。首先在移动终端的界面中可以添加“DTMF发送”选项,选中该“DTMF发送”选项后,显示“记事本”和“电话簿”选项,假设用户预先将各组长串数字存储在“记事本”中,则选中“记事本”选项,从“记事本”选项中选出所需要的目标长串数字,选中“发送”,即可将目标长串数字发送到网络侧。
采用本发明实施例提供的方法,可以实现很多情况下的长串数字的输入。
用户使用移动终端拨打客服电话充值时,网络侧提示输入卡号或密码时,用户通过移动终端将预先存储的卡号或密码选中,即移动终端将预先存储的卡号或密码提取出,将其转换成DTMF信号并发送,这样就可以将卡号或密码发送到网络侧,而无需用户逐个输入卡号或密码,省去了用户记忆卡号或密码的烦恼。
用户使用移动终端使用电话银行业务时,网络侧提示输入银行卡号或身份证号码,用户通过移动终端将预先存储的银行卡号或身份证号码选中,即移动终端将预先存储的银行卡号或身份证号码提取出,将其转换成DTMF信号,这样就可以将银行卡号或身份证号码发送到网络侧,而无需用户逐个输入银行卡号或身份证号码,省去了用户记忆银行卡号或身份证号码的烦恼。
如图2所示为本发明移动终端实施例一的结构示意图,该移动终端包括:接收模块11、提取模块12、转换模块13和发送模块14。接收模块11用于接收网络侧发送的要求输入目标长串数字的请求消息;提取模块12用于在接收模块11接收到网络侧发送的要求输入目标长串数字的请求消息后,提取预先存储的目标长串数字;转换模块13用于将提取模块12提取出的目标长串数字转换成双音多频信号;发送模块14用于将转换模块13转换成的双音多频信号发送给网络侧。
如图3所示为本发明移动终端实施例二的结构示意图,该实施例中,提取模块12包括第一提取单元121、显示单元122、接收单元123和第二提取单元124。第一提取单元121用于提取出预先存储的各组长串数字。显示单元122用于将第一提取单元121提取出的各组长串数字显示给用户。接收单元123用于接收选择指令,该选择指令用于从所述各组长串数字中选择出目标长串数字。第二提取单元124用于根据接收单元123接收到的选择指令,从第一提取单元121提取出的各组长串数字中提取出目标长串数字。
第一提取单元121具体可以包括遍历单元121a、提取子单元121b和封装单元121c。遍历单元121a用于遍历预先存储的字符,判断每个字符是否是ASCII中的数字。用户预先存储的可能不只是数字,还可能包括文字、字母、标点以及空格等,第一提取单元121提取数字的时候,需要通过遍历单元121a遍历用户预先存储的多个字符。提取子单元121b用于根据遍历单元121a的遍历结果,提取连续排列的n个以上的长串数字。提取子单元121b提取长串数字的过程可以参考前述实施例中提取如表一所示的字符中的长串数字的过程。封装单元121c用于将提取子单元121b提取出的连续排列的n个以上的数字封装成一组长串数字,直到预先存储的各组长串数字都提取完毕。
如图2和3所示的实施例中,转换模块13具体可以用于将提取模块12提取出的目标长串数字通过AT命令转换成DTMF信号。DTMF信号与数字的对应关系如表二所示。
本发明实施例提供的移动终端,提取出预先存储的长串数字,将长串数字转换成双音信号,无需用户记忆长串数字,便于用户使用业务。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。