2011-05-13 22:00:27 +02:00
|
|
|
#include "bitcoinaddressvalidator.h"
|
|
|
|
|
2011-05-14 11:18:39 +02:00
|
|
|
#include "base58.h"
|
2011-05-13 22:00:27 +02:00
|
|
|
|
2011-06-02 15:57:23 +02:00
|
|
|
#include <QDebug>
|
|
|
|
|
|
|
|
/* Base58 characters are:
|
|
|
|
"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
|
|
|
|
|
|
|
|
This is:
|
|
|
|
- All numbers except for '0'
|
|
|
|
- All uppercase letters except for 'I' and 'O'
|
|
|
|
- All lowercase letters except for 'l'
|
|
|
|
|
|
|
|
User friendly Base58 input can map
|
|
|
|
- 'l' and 'I' to '1'
|
|
|
|
- '0' and 'O' to 'o'
|
|
|
|
*/
|
|
|
|
|
2011-05-13 22:00:27 +02:00
|
|
|
BitcoinAddressValidator::BitcoinAddressValidator(QObject *parent) :
|
2011-05-14 11:18:39 +02:00
|
|
|
QRegExpValidator(QRegExp(QString("^[")+QString(pszBase58)+QString("]+")), parent)
|
2011-05-13 22:00:27 +02:00
|
|
|
{
|
|
|
|
}
|
2011-06-02 15:57:23 +02:00
|
|
|
|
|
|
|
QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) const
|
|
|
|
{
|
|
|
|
for(int idx=0; idx<input.size(); ++idx)
|
|
|
|
{
|
|
|
|
switch(input.at(idx).unicode())
|
|
|
|
{
|
|
|
|
case 'l':
|
|
|
|
case 'I':
|
|
|
|
input[idx] = QChar('1');
|
|
|
|
break;
|
|
|
|
case '0':
|
|
|
|
case 'O':
|
|
|
|
input[idx] = QChar('o');
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
return QRegExpValidator::validate(input, pos);
|
|
|
|
}
|