diff --git a/core/lib/Drupal/Core/Extension/ModuleHandler.php b/core/lib/Drupal/Core/Extension/ModuleHandler.php
index 727ab68..2cd64a7 100644
--- a/core/lib/Drupal/Core/Extension/ModuleHandler.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandler.php
@@ -1085,4 +1085,12 @@ public function getName($module) {
     $module_data = system_rebuild_module_data();
     return $module_data[$module]->info['name'];
   }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function invalidCore($core) {
+    return substr(\Drupal::CORE_COMPATIBILITY, 0, 1) != substr($core, 0, 1) || version_compare(\Drupal::VERSION, $core, '<');
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php b/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
index 48b5760..15b07a5 100644
--- a/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
@@ -357,4 +357,15 @@ public function getModuleDirectories();
    */
   public function getName($theme);
 
+  /**
+   * Check a module's core compatibility
+   *
+   * @param $core
+   *   The value of the core key in a module .info.yml file.
+   *
+   * @return bool
+   *   TRUE if invalid or incompatible, FALSE otherwise.
+   */
+  public function invalidCore($core);
+
 }
diff --git a/core/modules/system/src/Form/ModulesListForm.php b/core/modules/system/src/Form/ModulesListForm.php
index 23505fa..1540c29 100644
--- a/core/modules/system/src/Form/ModulesListForm.php
+++ b/core/modules/system/src/Form/ModulesListForm.php
@@ -336,10 +336,10 @@ protected function buildRow(array $modules, Extension $module, $distribution) {
     $reasons = array();
 
     // Check the core compatibility.
-    if ($module->info['core'] != \Drupal::CORE_COMPATIBILITY) {
+    if ($this->moduleHandler->invalidCore($module->info['core'])) {
       $compatible = FALSE;
       $reasons[] = $this->t('This version is not compatible with Drupal !core_version and should be replaced.', array(
-        '!core_version' => \Drupal::CORE_COMPATIBILITY,
+        '!core_version' => \Drupal::VERSION,
       ));
     }
 
@@ -381,7 +381,7 @@ protected function buildRow(array $modules, Extension $module, $distribution) {
         }
         // Disable the checkbox if the dependency is incompatible with this
         // version of Drupal core.
-        elseif ($modules[$dependency]->info['core'] != \Drupal::CORE_COMPATIBILITY) {
+        elseif ($this->moduleHandler->invalidCore($modules[$dependency]->info['core'])) {
           $row['#requires'][$dependency] = $this->t('@module (<span class="admin-missing">incompatible with</span> this version of Drupal core)', array(
             '@module' => $name,
           ));
diff --git a/core/modules/system/src/Tests/Module/DependencyTest.php b/core/modules/system/src/Tests/Module/DependencyTest.php
index 6ef1fb9..5b90e3d 100644
--- a/core/modules/system/src/Tests/Module/DependencyTest.php
+++ b/core/modules/system/src/Tests/Module/DependencyTest.php
@@ -80,6 +80,24 @@ function testIncompatibleCoreVersionDependency() {
   }
 
   /**
+   * Tests enabling modules with different core version specifications.
+   */
+  function testCoreVersionDependency() {
+    $this->drupalGet('admin/modules');
+    $checkbox = $this->xpath('//input[@type="checkbox" and @disabled="disabled" and @name="modules[Testing][system_incompatible_core_version_test_9x][enable]"]');
+    $this->assert(count($checkbox) == 1, 'Checkbox for the 9.x module is disabled.');
+    $checkbox = $this->xpath('//input[@type="checkbox" and @disabled="disabled" and @name="modules[Testing][system_compatible_core_version_test_80x][enable]"]');
+    $this->assert(count($checkbox) == 0, 'Checkbox for the 8.0.x module is not disabled.');
+    $checkbox = $this->xpath('//input[@type="checkbox"  and @name="modules[Testing][system_compatible_core_version_test_80x][enable]"]');
+    $this->assert(count($checkbox) == 1, 'Checkbox for the 8.0.x module is present.');
+    // Attempt to install the module.
+    $edit = array();
+    $edit['modules[Testing][system_compatible_core_version_test_80x][enable]'] = 'system_compatible_core_version_test_80x';
+    $this->drupalPostForm('admin/modules', $edit, t('Save configuration'));
+    $this->assertModules(array('system_compatible_core_version_test_80x'), TRUE);
+  }
+
+  /**
    * Tests enabling a module that depends on a module which fails hook_requirements().
    */
   function testEnableRequirementsFailureDependency() {
diff --git a/core/modules/system/tests/modules/system_compatible_core_version_test_80x/system_compatible_core_version_test_80x.info.yml b/core/modules/system/tests/modules/system_compatible_core_version_test_80x/system_compatible_core_version_test_80x.info.yml
new file mode 100644
index 0000000..eeb9970
--- /dev/null
+++ b/core/modules/system/tests/modules/system_compatible_core_version_test_80x/system_compatible_core_version_test_80x.info.yml
@@ -0,0 +1,6 @@
+name: 'System compatible core 8.0.x version test'
+type: module
+description: 'Support module for testing system dependencies.'
+package: Testing
+version: VERSION
+core: 8.0.x
diff --git a/core/modules/system/tests/modules/system_incompatible_core_version_test_9x/system_incompatible_core_version_test_9x.info.yml b/core/modules/system/tests/modules/system_incompatible_core_version_test_9x/system_incompatible_core_version_test_9x.info.yml
new file mode 100644
index 0000000..4bc6e45
--- /dev/null
+++ b/core/modules/system/tests/modules/system_incompatible_core_version_test_9x/system_incompatible_core_version_test_9x.info.yml
@@ -0,0 +1,6 @@
+name: 'System incompatible core 9.x version test'
+type: module
+description: 'Support module for testing system dependencies.'
+package: Testing
+version: 9.0.0
+core: 9.x
diff --git a/core/modules/system/tests/modules/system_test/system_test.module b/core/modules/system/tests/modules/system_test/system_test.module
index fc86adc..53d7cd5 100644
--- a/core/modules/system/tests/modules/system_test/system_test.module
+++ b/core/modules/system/tests/modules/system_test/system_test.module
@@ -64,6 +64,8 @@ function system_test_system_info_alter(&$info, Extension $file, $type) {
     'system_incompatible_core_version_dependencies_test',
     'system_incompatible_module_version_test',
     'system_incompatible_core_version_test',
+    'system_incompatible_core_version_test_9x',
+    'system_compatible_core_version_test_80x',
   ))) {
     $info['hidden'] = FALSE;
   }
diff --git a/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php b/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php
index bc5da97..6efc7ff 100644
--- a/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php
+++ b/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php
@@ -507,4 +507,23 @@ public function testGetModuleDirectories() {
     $this->moduleHandler->addModule('module', 'place');
     $this->assertEquals(array('module' => DRUPAL_ROOT . '/place'), $this->moduleHandler->getModuleDirectories());
   }
+
+  /**
+   * @covers ::invalidCore
+   */
+  public function testInvalidCore() {
+    $versions = array(
+      // Core version => invalid.
+      '7.x' => TRUE,
+      '7.24' => TRUE,
+      '8.x' => FALSE,
+      '8.0.x' => FALSE,
+      '8.1.x' => TRUE,
+      '9.0.x' => TRUE,
+    );
+    foreach ($versions as $version => $incompatible) {
+      $this->assertEquals($this->moduleHandler->invalidCore($version), $incompatible);
+    }
+  }
+
 }
