Разработка Android-Приложения На Java Для Проверки Qr-Кодов Сертификатов О Прививках

Спустя десятилетия после появления землян на планете Плюк, на смену КС как ценнейшему ресурсу для чатланов и пацаков пришел КУ-АР.

Представители двух народов, желавшие приобрести себе в будущем малиновые штаны, нашли способ подделать этот ценный товар, в результате чего пришлось внедрить метод проверки его подлинности.

В этой статье я расскажу о том, как я разработал Android-приложение для сканирования и проверки сертификатов о прививках, а также о том, что из этого получилось в итоге.



Разработка Android-приложения на Java для проверки QR-кодов сертификатов о прививках



Все начинается с чистки зубов

Некоторым людям идеи приходят в голову ночью, во сне, другие получают возможность погрузиться в «поток» во время упорной работы, а я испытываю бесконечный поток мыслей, в котором мелькают различные идеи, пока чистю зубы.

Вот и в этот раз, в октябре, пока чистил зубы, на фоне массовой публикации указов с ковидными ограничениями, мне в голову пришла мысль о потенциальной возможности обхода проверки QR-кода путем использования фишинговых сайтов с поддельными сертификатами о прививках.

Тут я сразу понял, что я не один такой умный( что позже подтвердилось ), и что это потенциально может стать серьезной проблемой для полной реализации мер по борьбе с Covid. Я описал текущую ситуацию с фишинговыми сайтами, которые являются клонами страниц с данными сертификата о прививках в другом статья ранее.

На тот момент я не слышал о существовании в России других приложений, созданных специально для сертификатов о прививках, но при этом решил специально не проверять эту информацию( А что из этого получилось, вы узнаете позже.

), поэтому через два дня я начал разработку собственного решения.



Как работает приложение

Концепция приложения довольно проста.

Ввод должен представлять собой содержимое QR-кода после его сканирования, после чего содержимое проверяется на предмет того, является ли оно ссылкой.

Если QR-код содержит что-то кроме ссылки, приложение должно отобразить ошибку.

Если же приложение содержит ссылку, то проверяется домен этой ссылки, а также подкаталоги и имена страниц, и если ссылка не соответствует заданным условиям, то приложение также выдает ошибку.

Если ссылка действительна, то данные сертификата запрашиваются, отображаются на экране, а также проверяются на повторное использование этого сертификата, после чего данные сохраняются в истории сканирования.

Ошибки вместе с содержимым QR-кода также сохраняются в истории сканирования, чтобы можно было оценить статистику использования.

QR-коды со скидкой на курицу .



Разработка Android-приложения на Java для проверки QR-кодов сертификатов о прививках

Общий принцип применения

Процесс сканирования

Публичный репозиторий с кодом проекта доступен по адресу GitHub .

Для сканирования QR-кодов я использовал библиотека на базе библиотеки ZXing .

Порядок сканирования и расшифровки QR-кода в приложении: кодСканнерПрок() , который использует метод подключенной библиотеки для декодирования содержимого QR-кода.

onDecoded() :

  
  
   

public class MainActivity extends AppCompatActivity implements View.OnClickListener { /* code */ private void codeScannerProc(){ codeScanner.setDecodeCallback(new DecodeCallback() { @Override public void onDecoded(@NonNull final Result result) { runOnUiThread(new Runnable() { @Override public void run() { checkContent(result.getText()); } }); } }); codeScannerView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { codeScanner.startPreview(); } }); } /* code */ }

Внутри метода onDecoded() , в который передается содержимое QR-кода, существует переопределенный метод бегать() , который вызывает метод для проверки данных, содержащихся в QR-коде.



Проверка содержимого QR-кода

Для того, чтобы отбросить любые данные, кроме ссылки на сертификат о прививке, используется метод проверкаСодержимое() , который содержит строку с содержимым QR-кода:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { /* code */ private void checkContent(String str){ Date currentTime = Calendar.getInstance().

getTime(); String scanTime = String.valueOf(currentTime); scanTime = scanTime.replace(" ", "\\"); if (!quickResponseCodeURL.isURL(str)) { historyFileInputOutput.writeInvalidQrToFile(1, str, scanTime); showNotSuccessScanResultAlertDialog(SCAN_RESULT_NOT_URL); return; } if (!quickResponseCodeURL.isValidURL(str)) { historyFileInputOutput.writeInvalidQrToFile(2, str, scanTime); showNotSuccessScanResultAlertDialog(SCAN_RESULT_INVALID_URL); return; } str = quickResponseCodeURL.replaceSpaces(str); startCertificateActivity(str); } /* code */ }

Сначала выполняется проверка, чтобы убедиться, что содержимое вообще является ссылкой.

Для этого используется метод isURL() сорт QuickResponseCodeURL .

Метод isURL() , как и последующие методы проверки содержимого QR-кода, использует регулярное выражение для возврата результата в виде логическое значение -ценности.

Для проверки соответствия ссылки ссылке используется шаблон регулярного выражения в виде экземпляра класса Шаблон urlPattern ( шаблон ссылки использует стандарт RFC 3986 ).

Использование класса Матчер и метод Матчи() мы получаем результат» истинный "если контент соответствует шаблону ссылки и соответственно ЛОЖЬ - во всех остальных случаях.



public class QuickResponseCodeURL { // Pattern for recognizing a URL, based off RFC 3986 private static final Pattern urlPattern = Pattern.compile( "(?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.

)" + "(([\\w\\-]+\\.

){1,}?([\\w\\-.

~]+\\/?)*" + "[\\p{Alnum}.

,%_=?&#\\-+()\\[\\]\\*$~@!:/{};' ]*)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);

Теги: #Android #разработка Android #covid-19 #qr-коды #разработка android #java #разработка android #вакцина от covid-19 #QR #qr-код #сертификаты о вакцинации

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.