从短信中提取 OTP(6 位数字)- Android
Extract OTP (6 digit) from SMS - Android
我有一个收听短信的广播接收器。当 SMS 到达时,我有完整的文本,但只关心 OTP。
我的挑战是如何提取 6 位 otp。我不能使用正则表达式,因为短信格式可能会改变。
示例“感谢您注册您的 otp 是 123456”
我想要 123456。短信结构可以更改,但 otp 将始终是 6 位数字
已使用 Pattern 和 Matcher。
如果这对任何人有帮助(在广播接收器的 onReceive 回调中):
//---This will match any 6 digit number in the message, can use "|" to lookup more possible combinations
public Pattern p = Pattern.compile("(|^)\d{6}");
//---retrieve the SMS message received---
try{
/**Extract sms*/
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for(int i=0; i<msgs.length; i++) //Msg Read
{
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
msg_from = msgs[i].getOriginatingAddress();
msgBody = msgs[i].getMessageBody();
}
/*
* Now extract the otp*/
if(msgBody!=null)
{
Matcher m = p.matcher(msgBody);
if(m.find()) {
otp.setText(m.group(0));
}
else
{
//something went wrong
}
}
}catch(Excep...
我有一个收听短信的广播接收器。当 SMS 到达时,我有完整的文本,但只关心 OTP。
我的挑战是如何提取 6 位 otp。我不能使用正则表达式,因为短信格式可能会改变。
示例“感谢您注册您的 otp 是 123456”
我想要 123456。短信结构可以更改,但 otp 将始终是 6 位数字
已使用 Pattern 和 Matcher。
如果这对任何人有帮助(在广播接收器的 onReceive 回调中):
//---This will match any 6 digit number in the message, can use "|" to lookup more possible combinations
public Pattern p = Pattern.compile("(|^)\d{6}");
//---retrieve the SMS message received---
try{
/**Extract sms*/
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for(int i=0; i<msgs.length; i++) //Msg Read
{
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
msg_from = msgs[i].getOriginatingAddress();
msgBody = msgs[i].getMessageBody();
}
/*
* Now extract the otp*/
if(msgBody!=null)
{
Matcher m = p.matcher(msgBody);
if(m.find()) {
otp.setText(m.group(0));
}
else
{
//something went wrong
}
}
}catch(Excep...