Điểm:1

Hàm băm: Tạo Mã định danh 3 chữ cái duy nhất

lá cờ cn

Tôi cần tạo một hàm tạo id lấy số có 4 chữ số và trả về một mã định danh 3 chữ cái duy nhất.

Tôi đã có một hàm tạo id gồm 2 chữ cái từ số có 3 chữ số với một số hạn chế (từ 100 đến 775), nhưng tôi không chắc cách thay đổi id để đáp ứng yêu cầu mới.

nếu order_id < 775:
  bảng chữ cái = danh sách ('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  alpha_index = ''
  _i_1 = 0
  _i_2 = 0
  nếu order_id >=100 và order_id < 775:
    gia số = 4*int((order_id-100)/100)
    _mod_100 = order_id%100
    nếu _mod_100 > 25 :
      _i_1 = (_mod_100/25)+số gia
      _i_2 = _mod_100%25
      alpha_index += bảng chữ cái[int(_i_1-1)]
      alpha_index += bảng chữ cái[int(_i_2-1)]
    khác:
      chỉ mục = str(order_id)[1]+str(order_id)[2]
      chỉ mục = int(chỉ mục)
      nếu tăng:
        alpha_index = bảng chữ cái[tăng-1]
      alpha_index += bảng chữ cái[index] 
    alpha_order_id = alpha_index+str(order_id)[3:]
khác:
  alpha_order_id = order_id

Bất kỳ trợ giúp được đánh giá cao.

kelalaka avatar
lá cờ in
$26^3 = 17576 > 9999$. chỉ cần nhân với $x$ lấy mod 17576?
fgrieu avatar
lá cờ ng
Đây là một câu hỏi lập trình cơ bản, không liên quan đến mật mã.
Paul Uszak avatar
lá cờ cn
@fgrieu Không liên quan gì cả? Không? Băm - không? Tính duy nhất của phản ứng - không? Giới thiệu về băm mật mã (giải pháp) - không? Băm phổ quát - không? Đây không phải là cách phát triển cơ sở người dùng fgrieu.
Majed Badawi avatar
lá cờ cn
@fgrieu Tôi không chắc nó có gì cơ bản và tại sao nó được đánh dấu là "lạc đề". Tôi không có kinh nghiệm về mật mã và hy vọng nhận được sự trợ giúp. Tôi đã giải thích rõ ràng vấn đề và cho thấy nỗ lực. Vui lòng tư vấn về nơi đặt câu hỏi này nếu nơi này không phải là nơi thích hợp cho nó (DBA, SO ...)
fgrieu avatar
lá cờ ng
Câu hỏi như đã hỏi không phải là về mật mã: chỉ đề cập đến hàm băm là trong tiêu đề, không phải trong báo cáo vấn đề. Đây là thay đổi về cơ sở số: từ 4 chữ số trong cơ số 10 thành 3 chữ số|ký tự trong cơ số 26. Thay đổi cơ sở là toán cơ bản/khoa học máy tính, không phải mật mã. Gợi ý: vì lý do trong nhận xét đầu tiên, bất kỳ sự kết hợp nào của 4 chữ số trong cơ số 10 đều có thể được biểu thị bằng 3 chữ số|ký tự trong cơ số 26.
Majed Badawi avatar
lá cờ cn
@fgrieu nên tạo chữ cái thứ ba như thế nào trong giải pháp trên để đảm bảo mỗi lần xuất ra một đầu ra duy nhất từ ​​một số có 4 chữ số? Tôi đang tìm cách thay đổi giải pháp trên để hỗ trợ điều này. Bất kỳ gợi ý hoặc thuật toán nào khác để nghiên cứu đều được đánh giá cao.
fgrieu avatar
lá cờ ng
Tôi sẽ đưa ra một ví dụ và để bạn viết mã (mà tôi khuyên bạn nên làm từ đầu). Giả sử bạn muốn chuyển đổi 9876 thành 3 chữ số|ký tự trong cơ số 26. Chúng tôi tính toán 9796%26=22, được mã hóa bởi ký tự `W`. Vẫn còn để mã hóa 9796//26=379.Chúng tôi tính toán 379%26=15, được mã hóa bằng ký tự `P`. Vẫn còn mã hóa 379//26=14 (chúng tôi biết rằng kết quả nhỏ hơn 26 vì lý do kelalaka đưa ra trong nhận xét), được mã hóa bởi ký tự `O`. Thông thường, trong thay đổi cơ sở, chúng tôi viết kết quả với ký tự thu được đầu tiên ở bên phải: `OPW`. Một lần nữa, đó là thay đổi hoặc mã hóa cơ sở.
Paul Uszak avatar
lá cờ cn
Thay vì mã của bạn, còn về hàm băm mật mã, ví dụ: SHA-x/MD5? Và do đó, `H(input) >> n` trong đó n là số quyền dịch chuyển thích hợp để có 3 ký tự. Vì bạn đang đi từ 4 đến 3, hãy tra cứu nguyên lý Pigeon Hole và phép chiếu là gì. Và sự khác biệt giữa hàm băm đơn giản như mã băm của Java và hàm mã hóa.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.