Есть ли способ анонимизации буквенно-цифровых переменных с помощью заданной формулы? - PullRequest
0 голосов
/ 03 апреля 2019

извиняюсь, если на этот вопрос уже был дан ответ

Меня попросили взять переменную буквенно-цифровых идентификаторов (некоторые исключительно числовые, некоторые исключительно буквы, некоторые смешанные) и анонимизировать их, используя стандартную формулу, чтобы тот, кто знает формулу, мог легко преобразовать «анонимный» идентификатор обратно к оригинальному идентификатору. Идентификаторы в настоящее время уникальны и должны будут оставаться уникальными после применения формулы.

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

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

Моим идеальным решением была бы формула, которая увеличивает каждую цифру или букву в значении идентификатора на заданную величину. Скажем, 3 цифры или три буквы. Так, например:

  • 111 станет 444
  • 78G-5 станет 01J-8
  • ABCDE станет DEFGH

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

Я ценю любые предложения о том, как этого добиться. Большое спасибо!

1 Ответ

0 голосов
/ 03 апреля 2019

Я не могу взять кредит на это, но если вам небезразличен какой-то VBA:

Для кодирования используйте это:

Public Function sHexEncode(sData As String) As String
    Dim iChar As Integer
    Dim sOutString As String
    Dim sTmpChar As String
    For iChar = 1 To Len(sData)
        sTmpChar = Hex$(Asc(Mid(sData, iChar, 1)))
        If Len(sTmpChar) = 1 Then sTmpChar = "0" & sTmpChar
        sOutString = sOutString & sTmpChar
    Next iChar
    sHexEncode = sOutString
End Function

Для декодирования используйте это:

Public Function sHexDecode(sData As String) As String
    Dim iChar As Integer
    Dim sOutString As String
    Dim sTmpChar As String
    For iChar = 1 To Len(sData) Step 2
        sTmpChar = Chr("&H" & Mid(sData, iChar, 2))
        sOutString = sOutString & sTmpChar
    Next iChar
    sHexDecode = sOutString
End Function

Вызовите функции, как если бы они были функциями на ваших листах:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...