diff --git a/Ciphers/MorseCode.js b/Ciphers/MorseCode.js
new file mode 100644
index 0000000000..9c64a39a25
--- /dev/null
+++ b/Ciphers/MorseCode.js
@@ -0,0 +1,85 @@
+/**
+ * @author mrmagic2020
+ * @description Enciphers a combination of letters, numbers and symbols into morse code.
+ * @see https://en.wikipedia.org/wiki/Morse_code
+ * @param {string} msg The message to be enciphered.
+ * @param {string} dot Symbol representing the dots.
+ * @param {string} dash Symbol representing the dash.
+ * @returns {string} Enciphered morse code.
+ * @example morse('Hello World!') = '**** * *-** *-** ---   *-- --- *-* *-** -** -*-*--'
+ */
+const morse = (msg, dot = '*', dash = '-') => {
+  const key = {
+    A: '*-',
+    B: '-***',
+    C: '-*-*',
+    D: '-**',
+    E: '*',
+    F: '**-*',
+    G: '--*',
+    H: '****',
+    I: '**',
+    J: '*---',
+    K: '-*-',
+    L: '*-**',
+    M: '--',
+    N: '-*',
+    O: '---',
+    P: '*--*',
+    Q: '--*-',
+    R: '*-*',
+    S: '***',
+    T: '-',
+    U: '**-',
+    V: '***-',
+    W: '*--',
+    X: '-**-',
+    Y: '-*--',
+    Z: '--**',
+    1: '*----',
+    2: '**---',
+    3: '***--',
+    4: '****-',
+    5: '*****',
+    6: '-****',
+    7: '--***',
+    8: '---**',
+    9: '----*',
+    0: '-----',
+    '.': '*-*-*-',
+    ',': '--**--',
+    '?': '**--**',
+    '!': '-*-*--',
+    '\'': '*----*',
+    '"': '*-**-*',
+    '(': '-*--*',
+    ')': '-*--*-',
+    '&': '*-***',
+    ':': '---***',
+    ';': '-*-*-*',
+    '/': '-**-*',
+    _: '**--*-',
+    '=': '-***-',
+    '+': '*-*-*',
+    '-': '-****-',
+    $: '***-**-',
+    '@': '*--*-*'
+  }
+
+  let newMsg = ''
+
+  msg.toString().split('').forEach((e) => {
+    if (/[a-zA-Z]/.test(e)) {
+      newMsg += key[e.toUpperCase()].replaceAll('*', dot).replaceAll('-', dash)
+    } else if (Object.keys(key).includes(e)) {
+      newMsg += key[e].replaceAll('*', dot).replaceAll('-', dash)
+    } else {
+      newMsg += e
+    }
+    newMsg += ' '
+  })
+
+  return newMsg.trim()
+}
+
+export { morse }
diff --git a/Ciphers/test/MorseCode.test.js b/Ciphers/test/MorseCode.test.js
new file mode 100644
index 0000000000..5dd4e07959
--- /dev/null
+++ b/Ciphers/test/MorseCode.test.js
@@ -0,0 +1,16 @@
+import { morse } from '../MorseCode'
+
+describe('Testing morse function', () => {
+  it('should return an enciphered string with a given input string', () => {
+    expect(morse('Hello World!')).toBe('**** * *-** *-** ---   *-- --- *-* *-** -** -*-*--')
+    expect(morse('1+1=2')).toBe('*---- *-*-* *---- -***- **---')
+  })
+
+  it('should leave symbols that does not have its corresponding morse representation', () => {
+    expect(morse('© 2023 GitHub, Inc.')).toBe('©   **--- ----- **--- ***--   --* ** - **** **- -*** --**--   ** -* -*-* *-*-*-')
+  })
+
+  it('should be able to accept custom morse code symbols', () => {
+    expect(morse('Nodejs', '.', '|')).toBe('|. ||| |.. . .||| ...')
+  })
+})