Перейти к содержимому

Число ответ enum что это

  • автор:

Использование E-num

E-num – это система авторизации, предоставляющая доступ к сервисам системы WebMoney Transfer посредством секретного ключа (уникального шифроблокнота), который хранится в мобильном устройстве (телефон, смартфон, планшет) участника. Система позволяет хранить ключи программы WM Keeper в своей базе данных (E-num Storage), что дает возможность безопасно пользоваться своими электронными кошельками, а также сервисами WebMoney практически на любом компьютере.

Система E-num проста и удобна. Авторизация происходит по схеме «Вопрос-ответ» следующим образом.

  1. На странице сайта (или в программе), предусматривающей защищённый доступ, участник видит свой email, далее отображается число-вопрос;
  2. Участник запускает в своем телефоне мобильный клиент E-num, приложение WM Keeper для Android или WM Keeper для iOS и вводит число-вопрос. После ввода, на дисплее телефона отображается число-ответ;
  3. Участник вводит число-ответ в поле авторизации на сайте (или в программе WM Keeper) и получает доступ к защищённым разделам сайтов или подтверждает выполнение операции (перевод средств, добавление корреспондента и др.).

Сервис E-num дает участникам следующие возможности.

  • Регистрироваться в системе, проводить настройку, восстанавливать доступ;
  • Использовать дополнительный безопасный способ входа в WM Keeper;
  • Подтверждать авторизацию на сервисах WebMoney при выполнении важных операций;
  • Подтверждать переводы средств, оплату услуг и проведение других операций в WM Keeper;

1. Регистрация, настройка, восстановление доступа¶

Для регистрации в системе E-num необходимо иметь E-mail, номер мобильного телефона и как минимум одно из устройств:

  • смартфон или планшет с ОС Android;
  • iPhone, iPad или iPod Touch с Apple iOS.

Адрес электронной почты, указываемый в Аттестате Вашего WMID WebMoney Transfer, необходимо использовать и в сервисе E-num.

Зарегистрироваться в системе E-num можно тремя способами:

  • самостоятельно на сайте сервиса — https://e-num.com ;
  • автоматически при подтверждении оплаты или авторизации на сайтах системы;
  • из приложения E-num клиент ( на Android и iOS );
  • новые участники системы WebMoney Transfer, использующие мобильное приложение, могут зарегистрироваться в сервисе E-NUM автоматически.

Пошаговая инструкция по регистрации в системе E-num приведена в основной статье Регистрация в сервисе E-num. Порядок действий при авторегистрации — в дополнительных инструкциях: Создание E-num аккаунта на сервисе Мерчант и Создание E-num аккаунта при подтверждении авторизации.

Реализация возможностей системы E-num осуществляется с использованием мобильного клиента или мобильного приложение WM Keeper для Android. Описание процедур установки и настройки E-num клиентов для различных платформ смотрите в статье E-num клиент и Подтверждение операций в Keeper Android.

Инструкцию по установке параметров E-num аккаунта смотрите в статье Настройка учетной записи E-num.

При утере доступа к E-num аккаунту воспользуйтесь инструкциями по восстановлению.

2. Вход в WM Keeper при помощи сервиса E-num¶

Enum-авторизацию можно использовать как дополнительный безопасный способ входа в WM Keeper WinPro. В этом случае ключи доступа к WMID записываются в специальное хранилище сервиса — E-num Storage, и необходимость хранить их на локальном компьютере отпадает.

Последовательность действий для подключения данной функции приведена в инструкции: Вход в WM Keeper при помощи сервиса E-num.

3. Дополнительная авторизация на сервисах WebMoney¶

Авторизация на сайтах системы WebMoney с использованием E-num представляет собой дополнительный этап аутентификации при выполнении наиболее важных операций в системе:

  • изменение ключевых персональных данных;
  • настройка безопасности;
  • перевод средств по доверию на сервисах системы;
  • оплата через сервис Merchant;
  • размещение заявки и выдача средств на кредитной бирже;
  • открытие лимита доверия в Долговом сервисе;
  • и другие операции.

О подключении данной функции и особенностях ее использования читайте статью Дополнительная авторизация при помощи E-num.

4. Подтверждение операций с помощью E-num¶

Функция подтверждения операций с помощью E-num позволяет участникам значительно повысить безопасность ключевых операций при работы со своим WM Keeper. К таким операциям относятся:

  • прямой перевод WM с кошелька на кошелек;
  • оплата счета;
  • добавление корреспондента;
  • смена ключей WM Keeper WinPro;
  • смена места хранения ключей WM Keeper WinPro);
  • сохранение копии ключей WM Keeper WinPro.

При подключении функции подтверждения с помощью E-num для проведения всех подобных операций будет требоваться дополнительное подтверждение с использованием мобильного E-num клиента, приложения WebMoney Keeper для Android или приложения WebMoney Keeper для iOS.

Последовательность действий при подключении и использовании данной функции смотрите в статьях Подтверждение операций при помощи сервиса E-num , Подтверждение операций в Keeper Android и Подтверждение операций в Keeper на устройствах с Apple iOS

Число ответ enum что это

В форме аутентификации на сайте вам отображается число-вопрос

Мобильное приложение E-NUM получает PUSH-уведомление и отображает единственно верное число-ответ

Нажмите «Отправить число-ответ» в приложении E-NUM или сами введите число-ответ в форму — вы аутентифицированы!

Примитивный тип Enum¶

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

TypeScript привносит новую синтаксическую конструкцию, называемую Enum (перечисление). enum представляет собой набор логически связанных констант, в качестве значений которых могут выступать как числа, так и строки.

Enum примитивный перечисляемый тип¶

Enum — это конструкция, состоящая из набора именованных констант, именуемая списком перечисления и определяемая такими примитивными типами, как number и string . Enum объявляется с помощью ключевого слова enum .

Перечисления с числовым значением¶

Идентификаторы-имена для перечислений enum принято задавать во множественном числе. В случае, когда идентификаторам констант значение не устанавливается явно, они ассоциируются с числовым значениями, в порядке возрастания, начиная с нуля.

1 2 3 4 5
enum Fruits  Apple, // 0 Pear, // 1 Banana, // 2 > 

Также можно установить любое значение вручную.

1 2 3 4 5
enum Citrus  Lemon = 2, // 2 Orange = 4, // 4 Lime = 6, // 6 > 

Если указать значение частично, то компилятор будет стараться соблюдать последовательность.

1 2 3 4 5 6 7
enum Berrys  Strawberry = 1, Raspberry, // 2 Blueberry = 4, Cowberry, // 5 > 

Компилятор рассчитывает значение автоматически только на основе значения предыдущего члена перечисления. То есть, если первой и третьей константе было установленно значение 10 и 20 .

1 2 3 4 5 6
enum Keys  A = 10, B, // 11 C = 20, D, // 21 > 

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

1 2 3 4 5 6
enum Keys  A = 10, B, // 11 C = 10, D, // 11 > 

Вдобавок ко всему enum позволяет задавать псевдонимы (alias). Псевдонимам устанавливается значение константы, на которую они ссылаются.

1 2 3 4 5
enum Langues  Apple, // en, value = 0 Apfel = Apple, // de, value = 0 LaPomme = Apple, // fr, value = 0 > 

При обращении к константе перечисления через точечную нотацию, будет возвращено значение. А при обращении к перечислению с помощью скобочной нотации и указания значения в качестве ключа, будет возвращено строковое представление идентификатора константы.

let value: number = Fruits.Apple; // 0 let identificator: string = Fruits[value]; // “Apple” 

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

1 шаг. Тем, кто ранее работал с enum , уже известно, что он позволяет получать строковое представление константы, а также значение, ассоциированное с ней. Поэтому для его создания требуется ассоциативный массив, коими в JavaScript являются объекты. Назовем объект Fruits и передадим его в качестве аргумента в функцию initialization , которая будет содержать код его инициализации.

1 2 3
let Fruits = <>; function initialization(Fruits) <> 

2 шаг. Создадим поле с именем Apple и присвоим ему в качестве значения число 0 .

1 2 3 4 5
let Fruits = <>; function initialization(Fruits)  Fruits['Apple'] = 0; > 

3 шаг. Ассоциация константа-значение произведена, осталось создать зеркальную ассоциацию значение-константа. Для этого создадим ещё одно поле, у которого в качестве ключа будет выступать значение 0 , а в качестве значения — строковое представление константы, то есть имя.

1 2 3 4 5 6
let Fruits = <>; function initialization(Fruits)  Fruits['Apple'] = 0; Fruits[0] = 'Apple'; > 

4 шаг. Теперь сократим код, но сначала вспомним, что результатом операции присваивания является значение правого операнда. Поэтому сохраним результат первого выражения в переменную value , а затем используем её в качестве ключа во втором выражении.

1 2 3 4 5 6
let Fruits = <>; function initialization(Fruits)  let value = (Fruits['Apple'] = 0); // то же самое что value = 0 Fruits[value] = 'Apple'; // то же самое что Fruits[0] = "Apple"; > 

5 шаг. Продолжим сокращать и в первом выражении откажемся от переменной value , а во втором выражении на её место поместим первое выражение.

1 2 3 4 5
let Fruits = <>; function initialization(Fruits)  Fruits[(Fruits['Apple'] = 0)] = 'Apple'; > 

6 шаг. Теперь проделаем то же самое для двух других констант.

1 2 3 4 5 6 7
let Fruits = <>; function initialization(Fruits)  Fruits[(Fruits['Apple'] = 0)] = 'Apple'; Fruits[(Fruits['Lemon'] = 1)] = 'Lemon'; Fruits[(Fruits['Orange'] = 2)] = 'Orange'; > 

7 шаг. Теперь превратим функцию intialization в самовызывающееся функциональное выражение и лучше анонимное.

1 2 3 4 5 6 7
let Fruits = <>; (function (Fruits)  Fruits[(Fruits['Apple'] = 0)] = 'Apple'; Fruits[(Fruits['Pear'] = 1)] = 'Pear'; Fruits[(Fruits['Banana'] = 2)] = 'Banana'; >)(Fruits); 

8 шаг. И перенесем инициализацию объекта прямо на место вызова.

1 2 3 4 5 6
let Fruits; (function (Fruits)  Fruits[(Fruits['Apple'] = 0)] = 'Apple'; Fruits[(Fruits['Pear'] = 1)] = 'Pear'; Fruits[(Fruits['Banana'] = 2)] = 'Banana'; >)(Fruits || (Fruits = <>)); 

Перечисление готово. Осталось сравнить созданное перечисление с кодом, полученным в результате компиляции.

1 2 3 4 5 6 7
// enum сгенерированный typescript compiler let Fruits; (function (Fruits)  Fruits[(Fruits['Apple'] = 0)] = 'Apple'; Fruits[(Fruits['Pear'] = 1)] = 'Pear'; Fruits[(Fruits['Banana'] = 2)] = 'Banana'; >)(Fruits || (Fruits = <>)); 

Теперь добавим в рассматриваемое перечисление псевдоним LaPomme (яблоко на французском языке) для константы Apple .

1 2 3 4 5 6 7
enum Fruits  Apple, // 0 Pear, // 1 Banana, // 2 LaPomme = Apple, // 0 > 

И снова взглянем на получившийся в результате компиляции код. Можно увидеть, что псевдоним создается так же, как обычная константа, но в качестве значения ему присваивается значение, идентичное константе, на которую он ссылается.

1 2 3 4 5 6
(function (Fruits)  Fruits[(Fruits['Apple'] = 0)] = 'Apple'; Fruits[(Fruits['Lemon'] = 1)] = 'Lemon'; Fruits[(Fruits['Ornge'] = 2)] = 'Ornge'; Fruits[(Fruits['LaPomme'] = 0)] = 'LaPomme'; // псевдоним >)(Fruits || (Fruits = <>)); 

Перечисления со строковым значением¶

Помимо значения, принадлежащего к типу number , TypeScript позволяет указывать значения с типом string .

1 2 3 4 5
enum FruitColors  Red = '#ff0000', Green = '#00ff00', Blue = '#0000ff', > 

Но в случае, когда константам присваиваются строки, ассоциируется только ключ со значением. Обратная ассоциация (значение-ключ) — отсутствует. Простыми словами, по идентификатору (имени константы) можно получить строковое значение, но по строковому значению получить идентификатор (имя константы) невозможно.

1 2 3 4 5 6
var FruitColors; (function (FruitColors)  FruitColors['Red'] = '#ff0000'; FruitColors['Green'] = '#00ff00'; FruitColors['Blue'] = '#0000ff'; >)(FruitColors || (FruitColors = <>)); 

тем не менее остается возможность создавать псевдонимы (alias).

1 2 3 4 5 6 7 8 9
enum FruitColors  Red = '#ff0000', Green = '#00ff00', Blue = '#0000ff', Rouge = Red, // fr "#ff0000" Vert = Green, // fr "#00ff00" Bleu = Blue, // fr "#0000ff" > 

И снова изучим скомпилированный код. Можно убедиться, что псевдонимы создаются так же, как и константы. А значение, присваиваемое псевдонимам, идентично значению констант, на которые они ссылаются.

1 2 3 4 5 6 7 8 9
var FruitColors; (function (FruitColors)  FruitColors['Red'] = '#ff0000'; FruitColors['Green'] = '#00ff00'; FruitColors['Blue'] = '#0000ff'; FruitColors['Rouge'] = '#ff0000'; FruitColors['Vert'] = '#00ff00'; FruitColors['Bleu'] = '#0000ff'; >)(FruitColors || (FruitColors = <>)); 

Смешанное перечисление¶

Если в одном перечислении объявлены числовые и строковые константы, то такое перечисление называется смешанным (mixed enum).

Со смешанным перечислением связаны две неочевидные особенности.

Первая из них заключается в том, что константам, которым значение не задано явно, присваивается числовое значение по правилам перечисления с числовыми константами.

1 2 3 4
enum Stones  Peach, // 0 Apricot = 'apricot', > 

Вторая особенность заключается в том, что если константа, которой значение не было присвоено явно, следует после константы со строковым значением, то такой код не скомпилируется. Причина заключается в том, что как было рассказано в секции Перечисления с числовым значением, если константе значение не было установлено явно, то её значение будет рассчитано как значение предшествующей ей константе +1 , либо 0 , в случае её отсутствия. А так как у предшествующей константы значение принадлежит к строковому типу, то рассчитать число на его основе не представляется возможным.

1 2 3 4 5 6
enum Stones  Peach, // 0 Apricot = 'apricot', Cherry, // Error Plum, // Error > 

Для разрешения этой проблемы в смешанном перечислении, константе, которая была объявлена после константы со строковым значением, необходимо задавать значение явно.

1 2 3 4 5 6
enum Stones  Peach, // 0 Apricot = 'apricot', Cherry = 1, // 1 Plum, // 2 > 

Перечисление в качестве типа данных¶

Может возникнуть мысль использовать перечисление в качестве типа данных переменной или параметра. Это вполне нормальное желание, но нужно быть очень осторожным: в TypeScript с перечислением связан один достаточно неприятный нюанс. Дело в том, что пока в перечислении есть хотя бы одна константа с числовым значением, он будет совместим с типом number . Простыми словами, любое число проходит проверку совместимости типов с любым перечислением.

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

 1 2 3 4 5 6 7 8 9 10 11 12 13
enum Fruits  Apple, Pear, Banana = 'banana', > function isFruitInStore(fruit: Fruits): boolean  return true; > isFruitInStore(Fruits.Banana); // ок isFruitInStore(123456); // ок isFruitInStore('banana'); // Error 

Если перечисление содержит константы только со строковыми значениями, то совместимыми считаются только константы перечисления, указанного в качестве типа.

 1 2 3 4 5 6 7 8 9 10 11 12 13
enum Berrys  Strawberry = 'strawberry', Raspberry = 'raspberry', Blueberry = 'blueberry', > function isBerryInStory(berry: Berrys): boolean  return true; > isBerryInStory(Berrys.Strawberry); // ок isBerryInStory(123456); // Error isBerryInStory('strawberry'); // Error 

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

Перечисление const с числовым и строковым значением¶

Перечисление enum , объявленное с помощью ключевого слова const , после компиляции не оставляет в коде привычных конструкций. Вместо этого компилятор встраивает литералы значений в места, в которых происходит обращение к значениям перечисления. Значения констант перечисления могут быть как числовыми, так и строковыми типами данных. Так же как и в обычных перечислениях, в перечислениях, объявленных с помощью ключевого слова const есть возможность создавать псевдонимы (alias) для уже объявленных констант.

Если создать два перечисления Apple и Pear , у каждого из которых будет объявлена константа Sugar с числовым значением, то на основе этих констант можно рассчитать количество сахара в яблочно-грушевом соке. Присвоив результат операции сложения количества сахара в промежуточную переменную, мы получим хорошо читаемое, задекларированное выражение.

 1 2 3 4 5 6 7 8 9 10
const enum Apple  Sugar = 10, > const enum Pear  Sugar = 10, > let calciumInApplePearJuice: number = Apple.Sugar + Pear.Sugar; 

После компиляции от перечисления не остается и следа, так как константы будут заменены числовыми литералами. Такое поведение называется inline встраивание.

let calciumInApplePearJuice = 10 + 10; 

Обращение к значению через точечную нотацию требует большего времени, чем обращение к литеральному значению напрямую. Поэтому код с inline конструкциями выполняется быстрее по сравнению с кодом, в котором происходит обращение к членам объекта. Прибегать к подобному подходу рекомендуется только в тех частях кода, которые подвержены высоким нагрузкам. За счет перечисления, объявленного с ключевым словом const , исходный код будет легко читаемым, а конечный код — более производительным.

Тип enum является уникальным для TypeScript, в JavaScript подобного типа не существует.

Когда стоит применять enum?¶

Может возникнуть вопрос — «Когда использовать enum и стоит ли это делать с учетом закрепившейся привычки работы со статическими классами и константами?».

Ответ очевиден — безусловно стоит применять тогда, когда нужна двухсторонняя ассоциация строкового ключа с его числовым или строковым значением (проще говоря, карта строковый ключ — числовое значение / числовой ключ — строковое значение).

Кроме того, enum лучше всего подходит для определения дискриминантных полей, речь о которых пойдет позже.

Ну а тем, кто считает, что скомпилированная конструкция enum отягощает их код и при этом они пользовались ранее транскомпилятором Babel , то ответьте себе на вопрос — Почему вы это делали, если он добавляет в сотню раз больше лишнего кода?. Рассуждение о том, что несколько лишних строк кода испортит или опорочит программу, является пустой тратой драгоценного времени.

Поэтому если есть желание использовать enum , то делайте это. Мне не доводилось встречать приложения, в которых не было бы enum , константных классов и просто модулей с константами одновременно. И это более чем нормально.

Трудности при входе с помощью E-num Storage в WM Keeper WinPro

Для доступа к WMID, зарегистрированному в WM Keeper WinPro, вы можете использовать E-num авторизацию при помощи числа-ответа, получаемого в приложении E-num, установленном на вашем мобильном устройстве.

Для авторизации вам нужно предварительно установить на свое мобильное устройство приложение E-num, выполнив процедуру его получения. Если вы регистрировались в WM Keeper WinPro через файл ключей и у вас нет учетной записи в E-num, то вам нужно дополнительно выполнить регистрацию в системе E-num, после чего загрузить ключи от вашего WMID в E-num Storage через настройки WM Keeper WinPro. Для установки приложения E-num подойдут современные мобильные телефоны (смартфоны и планшеты).

1 Для входа в свою учетную запись WebMoney запустите программу WM Keeper WinPro, выберите место хранения ключей E-num Storage. В поле E-mail укажите электронную почту, на которую вы регистрировались в E-num (при условии, что вы загружали ваш WMID в E-num) или которая была указана вами при регистрации в WebMoney (при условии, что вы выполнили процедуру получения приложения E-num).

Указанное сообщение означает, что вы не зарегистрированы в E-num или ввели неверно свой e-mail. После нажатия Да вы перейдете на сайт e-num.com для регистрации.

Если программа сообщает, что данный метод не может быть использован, то значит вы не получали приложение E-num. Получить приложение вы можете выполнив процедуру восстановления и получив новый код активации приложения.

2 После ввода e-mail на экране вы увидите окно программы, где отображается число-вопрос, которое вам нужно указать в приложении E-num для получения числа-ответа, которое в свою очередь вам и нужно указать в WM Keeper WinPro для входа в ваш WMID.

3 Далее запустите приложение E-num на телефоне и выберите пункт Подтверждение действия. Если при запуске приложения у вас запрашивается активация, то вам нужно ввести код активации, который приходит к вам в SMS-сообщении в процессе получения приложения E-num. В меню Подтверждение действия введите число-вопрос, которое было отображено в окне WM Keeper WinPro, после чего автоматически сформируется число-ответ.

Это число-ответ вам нужно указать в соответствующем поле программы WM Keeper WinPro.

В случае ввода верного числа-ответа вы перейдете на диалог указания пароля для входа в WMID.

Указанное сообщение программы означает, что вы ввели неверное число-ответ. Возможно, вы неверно указали число-вопрос в приложении, либо неверно ввели число-ответ в WM Keeper WinPro. Убедитесь так же, что получаете число-ответ в меню Подтверждение действия, а не в меню Подтверждение платежа, предназначенном только для платежей. Не пытайтесь повторно указать те же число-вопрос и число-ответ, т.к. эти значения при каждом запросе формируются заново, старые при этом уже недействительны. Поэтому пробуйте заново получить число-ответ в приложении E-num, с новым числом-ответ, которое покажет WM Keeper WinPro. Если ошибка повторяется, скорее всего, приложение выдает неверные значения. Выберите меню Настройки в приложении и далее пункт Код активации. Введите код активации, который приходил к вам в SMS-сообщении, когда вы получали приложение E-num или производили последнее его восстановление (не путайте с числом-ответ по SMS). После указания кода активации попробуйте заново выполнить вход в свой WMID. Если ошибка не устранилась, то вам нужно получить новый код активации, присылаемый вам в SMS-сообщении. Перед новой установкой, вам нужно удалить старое приложение с вашего телефона.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *